
Jak zautomatyzować SEO i publikację wpisów bez WordPressa
We wpisie o budowie tego bloga wspomniałem, że płaskie pliki (flat-file CMS) są genialne, ale mają jedną wadę: brak wbudowanego, wygodnego edytora do zarządzania SEO i polami niestandardowymi. WonderCMS ma wtyczkę SEO, ale krótki opis ląduje w słowach kluczowych, gdzie każde słowo jest oddzielone przecinkiem. W efekcie opis jest dublowany w meta description i meta keywords. To dla mnie niedopuszczalne. Musiałem napisać własny plugin.
WordPressem bym to załatwił wtyczką z absurdalnymi ograniczeniami i opłatą subskrypcyjną 50 dolarów na promocji. W mojej ocenie instalacja WordPressa na serwerze typu Cytr.us mija się absolutnie z celem, chyba że do nauki dłubania. Zauważyliście, że najpotrzebniejsze wtyczki zawsze są płatne, a napisanie autorskiej, bezpiecznej wtyczki do WP to droga przez mękę?
Moja modyfikacja bloga od strony panelu admina nie działa idealnie. I dobrze. Jeśli nieautoryzowany typ dostanie dostęp, ciężko mu będzie cokolwiek popsuć. Zbudowałem własny, zewnętrzny silnik wydawniczy. Zamiast logować się do panelu na serwerze, cały blog obsługuję z darmowego arkusza Google Sheets, a czarną robotę wykonuje za mnie n8n połączone z modelami AI. Pokażę Wam, jak to wygląda pod maską. Ostrzegam: jest tu trochę rzeźbienia, ale satysfakcja z działającego systemu wynagradza każdą zarwaną noc.
Mózg operacji: Arkusz Google i Harmonogram
Nie potrzebuję drogich systemów CMS. Mój edytor to zwykły Google Sheet. Mam tam zaledwie kilka kolumn: treść artykułu z tagami HTML, link do obrazka, opis rodzaju tytułu dla modelu i najważniejsze - kolumnę Status.
Mój system w n8n budzi się raz na dobę o 3:00 nad ranem dzięki węzłowi Schedule Trigger i zagląda do tego arkusza. Pyta o jedno: czy jest tu jakiś wiersz ze statusem gotowości do publikacji? Jeśli nic nie znajdzie, skrypt po prostu odświeża mapę strony oraz kanał RSS i idzie spać. Jeśli wyłapie artykuł, zaczyna się właściwa robota.
Departament sprzątania: Czego AI nie lubi?
Gdy artykuł wpada do systemu, wchodzi w pętlę. Zanim jednak wyślę go do sztucznej inteligencji, muszę go oczyścić. Modele LLM świetnie radzą sobie z tekstem, ale wysyłanie im surowego HTML-a pełnego znaczników <div>, <script> czy stylów CSS to proszenie się o kłopoty. Po pierwsze: pożera to niepotrzebnie tokeny. Po drugie: model po prostu się pogubi.
Dlatego postawiłem węzeł czyszczący kod. Za pomocą prostych wyrażeń regularnych skrypt wycina wszystkie tagi, konwertuje encje i ucina tekst do 3000 znaków. Do AI trafia czyste, stężone mięso.
Magia LLM: Grok robi za specjalistę SEO
Mając wyczyszczony tekst, odpalam model xAI Grok (wersja grok-4-1-fast-reasoning). Używam go z konkretnego powodu - jest szybki, ostry jak brzytwa i nie owija w bawełnę. Węzeł LLM dostaje jedno zadanie i żelazne zasady. Ma wygenerować czysty format JSON oparty na ścisłych parametrach technicznych.
| Parametr SEO | Wymagania dla modelu AI |
|---|---|
| Title | Maksymalnie 65 znaków |
| Description | 140-160 znaków zachęcających do kliknięcia |
| Keywords | 5-10 mocnych tagów tematycznych |
| Slug | Przyjazny link (brak polskich znaków, wyłącznie małe litery) |
Model ma zakaz generowania zbędnych wstępów. Oczywiście AI ma to do siebie, że uwielbia halucynować i dodawać na początku znaczniki markdown, co z miejsca wysadza cały mój skrypt. Dlatego zaraz za modelem stoi kolejny węzeł, który parsuje odpowiedź. To mój bezpiecznik. Uodparnia system na błędy, a w krytycznej sytuacji podstawia domyślne dane. Jako model zapasowy wrzuciłem API od OpenAI na wypadek, gdyby Grok nie dowiózł tematu.
Wdrożenie na produkcję: Zabawa z FTP
Teraz dzieje się magia flat-file CMS. Mój blog to tak naprawdę jeden plik json leżący na serwerze. System n8n łączy się przez FTP, pobiera ten plik, a następnie węzeł z kodem dopisuje na samym początku wygenerowany przed chwilą wpis wraz z metadanymi SEO i pełnym HTML-em.
Na koniec system nadpisuje plik na serwerze. Cyk. Artykuł jest na żywo. Kosztowało mnie to zero logowania do zewnętrznych kokpitów. Publikacja jednego wpisu - czyli jeden pełen przepływ w API Groka - kosztuje mnie dokładnie 0.0003 dolara.
To jest prawdziwe zero złotych. Publikuję wpisy za ułamek centa, bez płatnych subskrypcji, bez ukrytych opłat i bez prowizji dla twórców bezużytecznych wtyczek.
Sprzątanie i darmowy pracownik od Social Mediów
Po udanej publikacji, n8n wykonuje czynności porządkowe. Zapisuje w osobnym arkuszu dane wyjściowe z wygenerowanym SEO. Zmienia status w głównym arkuszu na opublikowany, żeby nie powielić akcji przy kolejnym wybudzeniu. Następnie uderza po HTTP do plików PHP na moim serwerze, żeby odświeżyć kanał RSS i mapę strony dla wyszukiwarek.
Skoro mam już gotowy tekst, dlaczego miałbym ręcznie pisać posty na Facebooka i platformę X? Wypuszczam równoległą gałąź automatyzacji, która ponownie karmi Groka treścią artykułu. Tym razem instruuję model krótko: pisz bez spiny, bez korporacyjnego żargonu i bez używania emotikon ognia. Gotowe, ułożone w akapitach posty lądują w osobnej zakładce w arkuszu.
Wprawne oko zauważy, że w n8n nie mam bezpośredniej publikacji w mediach społecznościowych. Kiedy przeczytałem umowę deweloperską xAI, po prostu podziękowałem. Nie będę podpisywał cyrografów. Odpaliłem darmowe konto na platformie Make.com. Przepływ publikacji postów kosztuje mnie tam 6 kredytów, więc nie ma fizycznej możliwości, żebym przebił darmowe, miesięczne limity.
Moje Zero Trust
Nauczyłem się, że serwer w każdej chwili potrafi się wywalić. Zastosowałem politykę Zero Trust. Pierwsze zabezpieczenie to trzymanie wszystkich surowych tekstów w arkuszach Google. Drugie zabezpieczenie to osobny przepływ tworzący pełne kopie zapasowe plików strony. Jeśli serwer padnie, jestem w stanie odtworzyć bloga na nowej domenie w kilkanaście minut.
W obecnej konfiguracji moja praca ogranicza się do napisania lub podyktowania tekstu. Nie mam aspiracji graficznych, więc obrazki tworzę autorskim generatorem bazującym na treści wpisu. Obrazek ląduje na serwerze. Wklejam HTML do pierwszej kolumny, link do grafiki w drugiej, wytyczne SEO w trzeciej. Zmieniam status na gotowy. Mogę w ten sposób zakolejkować 50 tekstów. Maszyna zrobi resztę przez noc.
Lekcja z budowy tego potwora
Nie oszukujmy się - wyklikanie całego przepływu zajęło trochę czasu. Kilka razy wysadziłem plik na serwerze, zanim zrozumiałem, że muszę zbudować szczelny parser wyłapujący halucynacje AI. Ale kiedy to wszystko ożyło i zaczęło stabilnie działać, poczułem prawdziwą satysfakcję.
Nie muszę opłacać abonamentów za kombajny do blogowania. Nie muszę klikać w dziesięć różnych pól, żeby ustawić meta tagi. Otwieram prosty arkusz kalkulacyjny, wrzucam tekst i zmieniam status. To jest czyste, pragmatyczne IT, z którego wyrzucono całą watę.



