Automatyzacja AI · Tomasz Pagacz - Jubiler Pagacz · 2026 · 10 miesięcy (rozwijany)
Auto-blog jubilera - pipeline SEO na GPT-5
Ponad 110 artykułów bez ani godziny pracy copywritera i 156 kliknięć z Google w 28 dni, czyli 34% kliknięć z Google w całym sklepie. Fraza, która ma już rankującą stronę, nigdy nie dostaje drugiego wpisu.
- Python
- GPT-5
- OpenAI Embeddings
- WordPress REST API
- Search Console API
- GitHub Actions
- PHP
Wyzwanie
Sklep jubilerski z katalogiem 19 500 produktów potrzebował treści, żeby wejść na długi ogon zapytań: porady o diamentach, próbach złota, wycenie, obrączkach. Agencja copywriterska za 30 artykułów miesięcznie to koszt rzędu kilku tysięcy złotych, a właściciel nie ma czasu pisać sam. Do tego blog, który rośnie codziennie, szybko zaczyna konkurować sam ze sobą: kolejny wpis na tę samą frazę odbiera pozycje poprzedniemu.
Nasze rozwiązanie
Pipeline w Pythonie odpalany na self-hosted runnerze co drugi dzień. Temat bierze z kolejki zbudowanej z Search Console: fraza, która ma już stronę na pozycji 5-20, dostaje odświeżenie istniejącego wpisu, fraza bez strony dostaje nowy krótki tekst, a fraza główna tematu dłuższy artykuł filarowy. GPT-5 pisze na podstawie kontekstu biznesowego klienta (certyfikaty IGI, szkolenia w Antwerpii, zakres usług), gpt-image-2 generuje ilustrację, a embeddingi dobierają linki do pokrewnych wpisów. Publikacja idzie przez REST API WordPressa, po niej ping IndexNow.
110+
Artykułów na blogu
156
Kliknięć z Google / 28 dni
34%
Udział w ruchu z Google
90%
Wpisów zaindeksowanych
Co zbudowaliśmy
- 01 Kolejka tematów z Search Console: odświeżenie, nowy wpis albo artykuł filarowy
- 02 Bramka przeciw kanibalizacji: fraza z rankującą stroną nie dostaje nowego wpisu
- 03 Przeplot 1:1 odświeżeń i nowych wpisów
- 04 Deduplikacja tematów po embeddingach, slugach i podobieństwie tytułów
- 05 Artykuł GPT-5 na podstawie kontekstu biznesowego klienta
- 06 Ilustracja gpt-image-2 z nakładką tekstową
- 07 Linki w treści dobierane embeddingami, siatka „Podobne tematy” w motywie
- 08 Limit publikacji po stronie WordPressa sprawdzany przed wydaniem tokenów
- 09 Skrypty naprawcze w trybie próbnym, zapis na produkcję tylko z flagą --apply
- 10 Audyt klastrów, scalanie duplikatów i przekierowania 301
Spis treści +
O projekcie
Jubiler Pagacz sprzedaje biżuterię, którą kupuje się raz w życiu: pierścionki zaręczynowe, obrączki, diamenty inwestycyjne. Przed takim zakupem ludzie czytają: jaka próba złota, jak sprawdzić certyfikat, ile kosztuje renowacja. Blog miał przechwycić te zapytania i doprowadzić czytelnika do salonu w Bielsku-Białej. Pozycjonowanie lokalne samego salonu to osobny temat (od czego zacząć w tym mieście, piszemy osobno). Blog dokłada do niego zapytania poradnikowe, na które salon jeszcze nie odpowiadał.
Problem nie polegał na tym, żeby napisać dziesięć tekstów. Polegał na tym, żeby pisać je przez rok, każdy o czymś innym, każdy podlinkowany do pozostałych i do stron usługowych, i nie zrobić z bloga stu tekstów walczących o te same frazy.
Co zbudowaliśmy
Temat z kolejki, nie z sufitu
Przed każdym przebiegiem pipeline pobiera z Search Console frazy, na które strona już się wyświetla, i układa z nich kolejkę. Każda fraza dostaje typ. Jeśli ma już stronę na pozycji 5-20, bot nie pisze nowego tekstu, tylko dosypuje sekcję do istniejącego. Jeśli strony nie ma, powstaje krótki wpis na 500-800 słów. Fraza główna tematu dostaje artykuł filarowy na 1800-2200 słów. Frazy poza tym pasmem i frazy brandowe („pagacz”, „jubiler”) wypadają z kolejki, bo te obsługuje strona główna. Od września priorytet mają obrączki i pierścionki zaręczynowe, a tematy o naprawach i skupie są spychane w dół kolejki.
Blog nie konkuruje sam ze sobą
Audyt wykazał klaster około 30 wpisów o bardzo podobnej treści. Dlatego nowy temat przechodzi trzy sprawdzenia: podobieństwo po embeddingach, podobieństwo tytułu i kolizję sluga. Odświeżenia i nowe wpisy idą na przemian, jeden do jednego, a duplikaty z przeszłości zostały scalone z przekierowaniami 301.
Tekst z kontekstem firmy
GPT-5 dostaje temat i plik z kontekstem biznesowym: kim jest Tomasz Pagacz, jakie ma certyfikaty (IGI, szkolenia w Antwerpii, członkostwo w SRJ), jakie usługi i pod jakimi adresami. Dzięki temu artykuł powołuje się na realne kompetencje i linkuje do właściwej podstrony usługowej, zamiast produkować ogólniki o biżuterii.
Obraz generowany, nie ze stocku
Hero powstaje w gpt-image-2 i dostaje nakładkę tekstową. Zdjęcia stockowe biżuterii wyglądają wszędzie tak samo, a generowana grafika należy tylko do tego bloga.
Linkowanie w treści i w motywie
Embeddingi (text-embedding-3-small) liczą podobieństwo nowego artykułu do istniejących i wybierają te w paśmie 0,35-0,90: dość blisko, żeby link miał sens, dość daleko, żeby nie był duplikatem. Model wplata do pięciu linków w tekst, a kontrola odrzuca odpowiedź, w której zmieniło się cokolwiek poza dodanymi odnośnikami. Blok „Podobne tematy” z linkami do wpisów z tego samego tematu renderuje już motyw sklepu, nie bot. Siatka działa w obie strony i nie zostawia martwych linków po scaleniu wpisów. Z motywu wychodzą też dane strukturalne artykułu, okruszków i FAQ.
Hamulce
WordPress ma miesięczny limit publikacji i odbija zapis ponad limit. Bot sprawdza pozostały limit na samym początku przebiegu, zanim wyda cokolwiek na tokeny. Skrypty, które poprawiają istniejące wpisy, domyślnie działają w trybie próbnym i zapisują na produkcję dopiero z flagą --apply.
Co z tego wyszło
11 września zrobiliśmy pomiar bazowy, zanim cokolwiek zmieniliśmy. Na 28 dni blog dał 156 kliknięć i 14 624 wyświetlenia przy średniej pozycji 8,0, czyli 34% kliknięć z Google w całym serwisie. Kontrolnie GA4 pokazało 161 sesji organicznych na wpisach w podobnym oknie. Z 108 wpisów 97 było zaindeksowanych. Trzy kolejne okna dwutygodniowe: 66, 78 i 85 kliknięć.
Ten sam pomiar znalazł problemy, których bez niego nikt by nie zauważył. Bot od 8 września kończył przebiegi na zielono i nic nie publikował, bo zapętlił się na jednym wierszu kolejki. 71 ze 108 wpisów nie miało ani jednego kliknięcia, a 46 fraz było kanibalizowanych, w tym wszystkie lokalne frazy „jubiler bielsko”. Kolejka została odblokowana tego samego dnia, a przy okazji uporządkowaliśmy przekierowania i odpowiedzi 410 dla usuniętych produktów, które zjadały budżet indeksowania. Tydzień później udział błędów 404 w ruchu Googlebota spadł z 16,8% do 2,9%.
Czego nie wiemy: ile artykułów doprowadziło kogoś do salonu albo do zakupu. To wymagałoby atrybucji, której to wdrożenie nie zbiera. Następny pomiar z tą samą metodą jest zaplanowany na 11 października. Blog stoi obok sklepu internetowego, który zbudowaliśmy dla tego samego klienta wcześniej, a pipeline to jeden z przykładów automatyzacji AI dla firm, którą budujemy.
Technicznie
Python 3.13 w trwałym venv na self-hosted runnerze GitHub Actions (VPS klienta), cron co drugi dzień o 6:00 UTC. Modele: GPT-5 do pisania, gpt-5-mini do zadań pomocniczych, gpt-image-2 do grafiki, text-embedding-3-small do podobieństwa. Publikacja przez WordPress REST API na Application Password, powiadomienia IndexNow i przekierowania przez własne mu-pluginy. Logika obliczeniowa (kolejka, dobór linków, deduplikacja, przekierowania) jest oddzielona od wywołań sieciowych i pokrywa ją 165 testów.
Zrzuty ekranu


Blog jubilera: kategorie z licznikami i generowane grafiki z nakładką tekstową.
Podobny problem do rozwiązania?
Napisz krótko, o co chodzi, wycena wraca w 24 godziny.
Zapytaj o wycenę →






