Witaj na blogu.
Czytaj bez spiny.
Jak zautomatyzować SEO i publikację wpisów bez WordPressa

Jak zautomatyzować SEO i publikację wpisów bez WordPressa

25 marca 2026

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

Arkusz kalkulacyjny Google Sheets pełniący rolę głównego edytora treści dla bloga

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?

Początek przepływu w n8n sprawdzający status artykułu w Google Sheets

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

Konfiguracja węzła Grok AI oraz parsera JSON w n8n

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.

Moduł platformy Make.com publikujący treści bezpośrednio na platformie X oraz Facebooku

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ę.

Dlaczego nie używam WordPressa do prowadzenia bloga?
WordPress to kobyła. Wymaga instalowania ciężkich i płatnych wtyczek do najprostszych operacji SEO. Na serwerach o mniejszych zasobach jego utrzymanie mija się z celem. Własny system CMS oparty na plikach płaskich oraz n8n daje mi 100% kontroli i kosztuje ułamek centa za publikację. Rozwiązałem problem raz, a dobrze.
Co się stanie, jeśli model AI wygeneruje błędny kod JSON z tagami SEO?
System posiada wbudowany bezpiecznik w postaci węzła parsującego. Skrypt wyłapuje najczęstsze halucynacje AI (np. niepotrzebnie doklejone znaczniki markdown). Jeśli główny model Grok całkowicie zignoruje wytyczne, w tle czeka zapasowy model API od OpenAI, który przejmuje proces generowania danych.
Jak zabezpieczasz bloga i automatyzację przed awarią serwera?
Stosuję autorską architekturę Zero Trust. Surowe teksty zawsze rezydują w chmurze Google Sheets. Dodatkowo stworzyłem izolowany przepływ n8n, który automatycznie pobiera pliki bloga i wykonuje zewnętrzny backup. W przypadku awarii fizycznego serwera mogę postawić całą infrastrukturę na innej domenie bez utraty chociażby jednego wpisu.
Widzisz błąd, masz uwagę albo chcesz coś dodać?
Napisz tutaj →
Wsparcie Warsztatu

Mój warsztat: Dell Latitude 5420

To maszyna, na której sam codziennie stukam w klawiaturę, piszę tego bloga i dłubię w automatyzacjach. Przetrwała sporo eksperymentów, nie zawodzi i łatwo wrzucić ją do plecaka. Mała, ale z odpowiednim zapasem mocy.

Zobacz mój sprzęt na Allegro →

Mój nastrój

Od autora: Sztuczna inteligencja za nas wszystkiego nie wymyśli. Czasem trzeba zburzyć koncepcję i zacząć od nowa. Wspieraj ten warsztat, żebym miał z czego budować.

Postaw mi kawę →
BEZ SPINY • MYŚLĘ • BEZ SPINY • ROBIĘ • BEZ SPINY • PISZĘ • BEZ SPINY • DZIELĘ SIĘ • BEZ SPINY • ZERO NADĘCIA • BEZ SPINY • ZERO POZERKI • BEZ SPINY • KONKRETNE RZECZY • BEZ SPINY • NORMALNY BLOG • BEZ SPINY • UCZĘ SIĘ • BEZ SPINY • BUDUJĘ • BEZ SPINY • SPRAWDZAM • BEZ SPINY • WYCIĄGAM WNIOSKI • BEZ SPINY • SERWER • BEZ SPINY • SEO • BEZ SPINY • AUTOMATYZACJE • BEZ SPINY • ŻYCIE ONLINE • BEZ SPINY • BLOG JAK DAWNIEJ • BEZ SPINY • RÓŻNE TEMATY • BEZ SPINY • PRAWDZIWE PROBLEMY • BEZ SPINY • PRAWDZIWE ROZWIĄZANIA • BEZ SPINY • UCZĘ SIĘ PUBLICZNIE • BEZ SPINY • TESTUJĘ I OPISUJĘ • BEZ SPINY • CZASEM TECHNICZNIE • BEZ SPINY • CZASEM ŻYCIOWO •
Antoni Fic - O mnie

O Mnie

To nie jest blog. To narzędziownia. Odrzucam SaaS-owe abonamenty, marketingowy bełkot i cyfrowy szum. Sam stawiam serwery, tnę czysty kod i zmuszam sztuczną inteligencję do odwalania czarnej roboty.

Nie sprzedaję kursów, nie buduję zasięgów i nie owijam w bawełnę. Zrzucam tu gotowe, zweryfikowane w boju systemy.