SEO Cloudflare Workers
Jak wprowadzać zmiany technicznego SEO w Cloudflare Workers — handler fetch, HTMLRewriter do wstrzykiwania canonical/hreflang/JSON-LD, przekierowania oparte na KV, Workers Cache API kontra cache brzegowy i Cache-Control, granica cloakingu oraz sposób, w jaki Bot Fight Mode może zablokować Googlebota.
Języki
1 sygnał dowodowy na tej stronie
- Dane źródłowe dostępne przez linkgooglebot.json
SEO Cloudflare Workers to techniczne SEO wykonywane w bezserwerowym środowisku Cloudflare: Worker widzi tylko żądania pasujące do jego trasy, a każde z nich trafia do jednego handlera fetch, w którym przepisujesz żądanie, nagłówki odpowiedzi i treść odpowiedzi. Przepisywanie treści odbywa się przez HTMLRewriter — właściwy mechanizm wstrzykiwania canonical, poprawiania hreflang lub dodawania JSON-LD bez wdrożenia CMS-a — i musi być idempotentne dla brakujących, zduplikowanych oraz nie-HTML-owych przypadków. Przekierowania na dużą skalę należą do KV albo D1; Bulk Redirects/Rules są prostsze dla małych zestawów, ale wybierz jednego właściciela URL-a, aby systemy się nie kłóciły. Trzy różne rzeczy dzielą słowo cache — Workers Cache API, cache brzegowy Cloudflare i Cache-Control originu — a ich pomylenie sprawia, że wstrzyknięty tag wydaje się nie pojawiać; diagnozuj według klucza cache, warstwy, TTL i unieważnienia. Twarda zasada dotyczy cloakingu: stosuj identyczną logikę dla Googlebota i użytkowników. Najbardziej charakterystyczne ryzyko Workers to Bot Fight Mode blokujący Googlebota w potoku, do którego reguły allow WAF nawet nie docierają. Każdą zmianę wpływającą na SEO wdrażaj z zapisanymi metadanymi wersji i przetestowanym wycofaniem, a potem weryfikuj przez GSC URL Inspection i nagłówek CF-Cache-Status. Ogólną koncepcję znajdziesz w hubie Edge SEO.
TL;DR — Cloudflare Workers to małe programy działające w sieci Cloudflare, przed właściwą witryną. Worker może dodać przekierowanie, poprawić meta tag albo wstrzyknąć canonical podczas obsługi strony — bez dotykania CMS-a i bez czekania na programistów. Ta strona pokazuje praktyczną, kodową wersję szerszej idei Edge SEO: jak robić to konkretnie w Workers. Jednej zasady nie wolno łamać: każda zmiana Workera musi być taka sama dla Google i prawdziwych użytkowników. Pokazywanie Google czegoś innego to cloaking.
Czym jest Cloudflare Worker — prosto wyjaśnione
Jeśli witryna działa w Cloudflare, każde żądanie odwiedzającego (albo Googlebota) przechodzi przez sieć Cloudflare, zanim dotrze do właściwego serwera. Worker to mały skrypt, który można uruchomić w tym miejscu ścieżki. Widzi przychodzące żądanie i wychodzącą odpowiedź, a następnie może zmienić jedno lub drugie. Evidence for this claim Cloudflare Workers run code on Cloudflare's network and can inspect or modify requests and responses. Scope: Cloudflare Workers request handling. Confidence: high · Verified: Cloudflare Workers: How Workers works
Na tym polega cała wartość dla SEO: możesz naprawić elementy stron, których w inny sposób nie da się edytować. Zablokowana platforma? Czekasz tygodniami, aż programista doda canonical? Worker może zrobić to w kilka minut, na żywo, bez wdrażania zmian w samej witrynie.
Do czego używa się Workers w SEO
- Przekierowania — wysyłanie starych URL-i do nowych na brzegu sieci, nawet w tysiącach przypadków.
- Naprawianie lub dodawanie tagów — wstrzykiwanie canonical, poprawianie tytułu, dodawanie hreflang i danych strukturalnych — wszystko bez edycji źródła strony.
- Przepisywanie nagłówków — dodawanie lub poprawianie elementów takich jak
X-Robots-Tag.
Zasada, której nie wolno łamać
Cokolwiek robi Worker, musi robić to dla wszystkich. Jeśli pokazujesz Googlebotowi inną stronę niż prawdziwej osobie — aby manipulować rankingiem — to cloaking, sprzeczny z zasadami Google. Evidence for this claim Google defines serving materially different content to search engines and users to manipulate rankings as cloaking and a spam-policy violation. Scope: Google Search spam policy; legitimate personalization is context-dependent. Confidence: high · Verified: Google: Spam policies — cloaking Bezpieczny wzorzec jest prosty: stosuj tę samą logikę do każdego żądania, niezależnie od tego, kto je wysyła. (Hub Edge SEO omawia tę zasadę szczegółowo — tutaj zakładamy, że znasz już pojęcie i szukasz instrukcji właściwych dla Cloudflare.)
Dwa sposoby, by zaszkodzić sobie
Większość historii typu „Cloudflare zaszkodził mojemu SEO” wcale nie dotyczy kodu Workera:
- Ustawienie blokujące boty. Bot Fight Mode Cloudflare może przypadkowo zablokować lub rzucić wyzwanie Googlebotowi. Jeśli Google nie może pobrać stron, nic innego nie ma znaczenia.
- Zamieszanie z cache. Cloudflare ma więcej niż jeden rodzaj cache i jeśli nie wiesz, z którego korzystasz, wdrożona zmiana może wyglądać tak, jakby „nie była widoczna”.
Chcesz zobaczyć właściwy kod — handler fetch, przykład HTMLRewriter i tabelę przekierowań KV — oraz szczegóły dotyczące cache i blokowania botów? Przejdź do karty Advanced.
TL;DR — Cloudflare Worker widzi tylko żądania dopasowane do skonfigurowanej trasy i przechwytuje każde z nich w jednym handlerze
fetch, w którym kolejno: przepisujesz żądanie, przepisujesz nagłówki odpowiedzi i przepisujesz treść odpowiedzi przezHTMLRewriter. To prawdziwy mechanizm stojący za „wstrzyknięciem canonical” lub „poprawieniem tytułu” — musi być idempotentny i przetestowany dla brakujących, zduplikowanych oraz nie-HTML-owych odpowiedzi, a nie tylko dla szczęśliwej ścieżki. Przekierowania na dużą skalę należą do KV (szybkie wyszukiwanie klucza) albo D1 (dane relacyjne); Bulk Redirects/Rules prościej obsługują małe zestawy, a ja zwykle preferuję przekierowania na brzegu nad przekierowaniami serwerowymi — ale wybierz jednego właściciela każdego URL-a, bo przekierowanie Workera, Bulk Redirect i przekierowanie originu mogą zadziałać na tej samej ścieżce. Trzy różne rzeczy dzielą słowo „cache” — Workers Cache API (caches.default), cache brzegowy Cloudflare iCache-Controloriginu — a pomylenie ich jest zwykle przyczyną, dla której „mój tag się nie pojawił”; diagnozuj nieaktualność według klucza cache, warstwy, TTL i unieważnienia, zamiast zgadywać. Własne zalecenia Google dotyczące ETag / If-None-Match / 304 można bezpośrednio zastosować do Workera, który kontroluje odpowiedź. Granica cloakingu: identyczna logika dla każdego odbiorcy. Najbardziej charakterystyczne dla Workers ryzyko samodzielnego problemu to Bot Fight Mode działający poza WAF Ruleset Engine, więc zwykłe reguły „allow” do niego nie docierają. Każdą zmianę wpływającą na SEO wdrażaj z zapisanymi metadanymi wersji, przetestowanym wycofaniem i warunkiem zatrzymania — następnie zweryfikuj ją przez GSC URL Inspection orazCF-Cache-Status.
Czym ten artykuł jest — a czym nie jest
To praktyczny, kodowy dodatek do huba Edge SEO. Hub zawiera ogólną definicję, tabelę porównującą platformy (Workers, Akamai, Fastly, Lambda@Edge, Vercel, Netlify), decyzję Snippets kontra Workers oraz pełne omówienie zasady cloakingu. Nie odtwarzam tu tych treści. Ta strona schodzi o poziom głębiej w Cloudflare Workers — środowisko uruchomieniowe, na którym działa również własny worker tej witryny, podłączony przez run_worker_first w wrangler.toml — i pokazuje prawdziwe API zamiast ogólnikowego stwierdzenia, że „edge compute może wstrzykiwać tagi”.
Uwaga przed kodem: Google nie ma dokumentacji SEO dotyczącej konkretnie Cloudflare Workers. Oficjalne wytyczne, które mają tu zastosowanie (polityka cloakingu, cache HTTP, indeksowanie przez CDN), są ogólne i dotyczą każdej implementacji brzegowej. Wolę powiedzieć to wprost, niż sugerować istnienie dokumentu Google, którego nie ma.
Jak Worker znajduje się na ścieżce żądania i odpowiedzi
Worker to bezserwerowy skrypt działający w izolatach V8. Każde żądanie skierowane do niego przechodzi przez handler fetch. Evidence for this claim A Cloudflare Worker receives HTTP requests through a fetch handler. Scope: Cloudflare Workers handlers. Confidence: high · Verified: Cloudflare Workers: Fetch handler Sformułowanie „skierowane do” ma tu realne znaczenie: Worker widzi tylko żądania pasujące do skonfigurowanej trasy lub własnej domeny — wszystko inne w ogóle nie dociera do handlera fetch. Gdy dwa wzorce tras mogą pasować do tego samego URL-a, pierwszeństwo ma bardziej szczegółowy wzorzec. Zanim zaufasz zachowaniu Workera dla danego URL-a, potwierdź więc dopasowanie trasy i sprawdź, która wdrożona wersja jest aktywna na tej trasie (środowiska Wranglera i stopniowe wdrożenia sprawiają, że wersja obsługująca ruch nie zawsze jest tą z edytora). W handlerze możesz wykonać trzy odrębne czynności, w tej kolejności:
- Przepisać żądanie przed wysłaniem go do originu.
- Przepisać nagłówki odpowiedzi podczas drogi powrotnej.
- Przepisać treść odpowiedzi — przez
HTMLRewriter.
Oto minimalny kształt:
export default {
async fetch(request, env, ctx) {
// 1. (optionally) inspect/modify the request
const response = await fetch(request); // hit the origin
// 2. rewrite headers
const headers = new Headers(response.headers);
headers.set("X-Robots-Tag", "index, follow");
// 3. rewrite the body with HTMLRewriter (see next section)
return new Response(response.body, { ...response, headers });
},
};Zespół SALT.agency, który na podstawie badań Cloudflare Workers ukuł określenie „edge SEO”, zbudował swoje narzędzia jako łańcuch filtrów — filtr żądania, filtr odpowiedzi i filtr treści. To ten sam wzorzec trzech faz; zespół nadał mu tylko nazwę. Rozdzielenie tych trzech faz w głowie pomaga zachować czytelność Workera.
Przepisywanie HTML za pomocą HTMLRewriter
HTMLRewriter to strumieniowy parser HTML Cloudflare i właściwe API stojące za każdym trikiem typu „wstrzyknij tag”. Evidence for this claim Cloudflare HTMLRewriter provides selector-based handlers that can transform streamed HTML elements. Scope: Cloudflare Workers HTMLRewriter API. Confidence: high · Verified: Cloudflare Workers: HTMLRewriter Rejestrujesz handlery elementów .on(selector, handler), a handler otrzymuje getAttribute / setAttribute, prepend / append, setInnerContent oraz replace. Ponieważ parser działa strumieniowo, nie buforujesz całego dokumentu w pamięci.
Wstrzykiwanie lub poprawianie tagu canonical
class CanonicalHandler {
constructor(url) { this.url = url; }
element(el) { el.setAttribute("href", this.url); }
}
const rewriter = new HTMLRewriter()
.on('link[rel="canonical"]', new CanonicalHandler("https://example.com/preferred/"));
return rewriter.transform(response);Jeśli strona w ogóle nie ma canonical, podłącz handler do head i zamiast edytować istniejący tag dodaj nowy przez append. W obu przypadkach pamiętaj o lekcji z obszaru canonicalizacji: rel=canonical to wskazówka, a nie polecenie — Worker pozwala ustawić ją spójnie na całej platformie, ale ostatecznie decyduje Google.
Pokazany wyżej CanonicalHandler zakłada, że tag już istnieje, a odpowiedź jest HTML-em. W produkcji nie masz gwarancji żadnego z tych założeń, a pomyłka prowadzi do dwóch tagów canonical na jednej stronie zamiast jednego. Zanim wdrożysz taką modyfikację, uczyń ją idempotentną i przetestuj dla:
- Brak istniejącego canonical — handler musi wykryć brak i przez
appenddodać tag dohead, a nie po cichu nic nie zrobić, bo dopasowanielink[rel="canonical"]niczego nie znalazło. - Istniejący zduplikowany lub zniekształcony canonical — zdecyduj, czy usunąć błędny tag, czy pozwolić modyfikacji dodać drugi (to prawdziwy błąd, a nie przypadek brzegowy — duplikaty canonical są częstym problemem wywołanym przez nas samych).
- Odpowiedź niebędąca HTML-em — trasą API, obrazem ani odpowiedzią przekierowania przechodzącą przez ten sam Worker nie należy w ogóle przepuszczać przez
HTMLRewriter; ogranicz transformację do tras i typów treści, które rzeczywiście sprawdziłeś. - Dwukrotne uruchomienie transformacji dla tej samej odpowiedzi (ponowienie, zagnieżdżony
fetch) — upewnij się, że nie dołączy drugiego tagu.
Dodawanie lub poprawianie alternatyw hreflang
Ten sam mechanizm, sterowany konfiguracją. Dołączasz jeden link[rel="alternate"] na lokalizację do head. Jeśli alternatywy są relacyjne i zależne od lokalizacji, konfiguracja należy do D1; jeśli jest płaską tabelą wyszukiwania, wystarczy KV. Chodzi o to, że HTMLRewriter wstrzykuje je identycznie dla każdego odbiorcy — nie rozgałęziasz logiki według user agenta.
Wstrzykiwanie danych strukturalnych JSON-LD
new HTMLRewriter().on("head", {
element(head) {
head.append(
`<script type="application/ld+json">${JSON.stringify(schema)}</script>`,
{ html: true }
);
},
});Limity CPU, które zaczynają boleć przy skali
Z jednym twierdzeniem konkurencji bym polemizował: „sub-millisecond, no constraints.” Prawdziwym ograniczeniem jest czas CPU: 10 ms w planie bezpłatnym, 30 ms w płatnym (czas zegarowy oczekiwania na fetch się nie liczy — liczy się czas CPU). Przy typowych przepisaniach nawet tego nie zauważysz. Przy ciężkich przebiegach HTMLRewriter po bardzo dużych stronach jest to realne ograniczenie, które trzeba uwzględnić w projekcie, a nie straszenie.
Przekierowania na brzegu: KV kontra D1 kontra Rules
Zwykle wolę umieszczać przekierowania na brzegu (na poziomie CDN) niż na serwerze — odciąża to origin i działa, zanim strona w ogóle zostanie wygenerowana. W Cloudflare w moim przewodniku Ahrefs dotyczącym przekierowań dla SEO opisałem kilka możliwości: pojedyncze lub zbiorcze przekierowania, redirect rules, page rules albo Workers z parami klucz-wartość — ewentualnie Worker modyfikujący nagłówki, aby dodać przekierowanie.
W tabeli obsługiwanej przez Workera naturalnym miejscem jest KV: szybkie, ostatecznie spójne wyszukiwanie klucza po URL-u.
export default {
async fetch(request, env) {
const url = new URL(request.url);
const target = await env.REDIRECTS.get(url.pathname); // KV namespace
if (target) return Response.redirect(target, 301);
return fetch(request);
},
};Sięgnij po D1, gdy przekierowania są relacyjne (SQL per lokalizacja lub segment, który chcesz odpytywać). I pamiętaj, kiedy Worker byłby przesadą: dla małego, statycznego zestawu przekierowań prostsze są Bulk Redirects Cloudflare albo Redirect Rules — nie wymagają żadnego kodu. Nie pisz własnego Workera KV dla pięćdziesięciu przekierowań.
Wybierz jednego właściciela danego URL-a i nie pozwól, aby Worker, Bulk Redirect, Redirect Rule oraz przekierowanie originu działały na tej samej ścieżce — to osobne systemy, z których każdy może zadziałać dla tego samego żądania. Gdy pasuje więcej niż jeden, zamiast czystego przekierowania debugujesz pierwszeństwo. Przed dodaniem przekierowania sprawdź, czy nie istnieje już w innych systemach dla tej ścieżki, a warstwę wybierz według złożoności dopasowania (proste 1:1 kontra wzorcowe), skali i tego, kto ma je obserwować lub wycofywać — przekierowanie Workera mieszka w kodzie i logach, a Bulk Redirect lub Rule w panelu i łatwiej je audytować lub cofnąć osobie niebędącej programistą.
Cache: trzy różne rzeczy pod jedną mylącą nazwą
To sekcja pomijana przez strony konkurencji i właśnie ona wywołuje najwięcej pytań typu „dlaczego moja zmiana się nie pojawiła”. Trzy odrębne warstwy dzielą słowo cache:
- Workers Cache API —
caches.defaulticaches.open(). To programowalny cache zakresu Workera, który odczytujesz i zapisujesz w kodzie. - Cache brzegowy Cloudflare — cache CDN obsługujący zasoby. Jest odrębny od Cache API.
- Originowe
Cache-Control— nagłówki ustawiane przez origin (albo Workera), które wpływają na obie powyższe warstwy oraz na działanie Googlebota.
Pomylenie ich sprawi, że uznasz, iż zmiana nie została wdrożona, podczas gdy jest po prostu serwowana z warstwy, której nie wyczyściłeś.
Gdy zmiana rzeczywiście się nie pojawia, nie zgaduj — diagnozuj warstwa po warstwie:
- Klucz cache. Jakie atrybuty żądania decydują, czy dwa żądania trafią do tego samego wpisu cache (URL, a czasem nagłówki lub cookies, jeśli uwzględnia je klucz cache)? Przepisanie zależne od elementu nieuwzględnionego w kluczu może zwrócić niewłaściwy wariant.
- Warstwa, która zwróciła odpowiedź. Sprawdź
CF-Cache-Status(HIT/MISS/EXPIRED/DYNAMIC), aby zobaczyć, czy odpowiedział cache brzegowy, czy żądanie dotarło do Workera. - Lokalizacja i stan. Cache Cloudflare jest rozproszony między centrami danych — czyszczenie ani nowe wdrożenie nie musi natychmiast unieważnić każdej lokalizacji brzegowej.
- TTL i reguła, która go ustawiła. Potwierdź, czy TTL kontroluje reguła cache, nagłówek
Cache-Controlz originu czy nagłówek ustawiony przez samego Workera. - Unieważnienie. Czy wyczyściłeś konkretny URL, wszystko, czy czekasz na wygaśnięcie TTL? Wpis Cache API należący do Workera (
caches.default) wymaga własnego jawnegodelete()— czyszczenie cache CDN go nie dotyka.
Co Googlebot robi z ETag / If-None-Match / 304
Jeśli Worker generuje lub przepisuje odpowiedź, on kontroluje nagłówki cache — dlatego wytyczne Google z grudnia 2024 dotyczące cache HTTP są dla ciebie bezpośrednio użyteczne. Google obsługuje heurystyczne cache HTTP przez ETag/If-None-Match oraz Last-Modified/If-Modified-Since, zdecydowanie zaleca ETag, ponieważ jest mniej podatny na błędy, i mówi, że gdy ETag crawlera pasuje, serwer powinien zwrócić 304 Not Modified bez treści. Worker generujący odpowiedź może zrobić dokładnie to: obliczyć ETag, porównać go z If-None-Match i samodzielnie zakończyć obsługę kodem 304 — oszczędzając obliczenia i dając Googlebotowi szybki, możliwy do cache’owania sygnał.
Kompromis ponownego crawlowania przy max-age
Google zaleca również rozważenie ustawienia Cache-Control: max-age, aby pomóc crawlerom zdecydować, kiedy ponownie crawlować URL. Problem w przypadku Workera przepisującego HTML polega na tym, że agresywne max-age na stronie, której tagi wstrzykiwane przez Workera właśnie się zmieniły, może opóźnić zauważenie przez Googlebota dopiero co wdrożonej aktualizacji. Nie nakładaj długiego czasu cache na przepisywany HTML i nie zapominaj o nim.
Granica cloakingu zastosowana do Workers
- Sprawdzanie User-Agent nie jest automatycznie cloakingiem. Polityka spamu Google definiuje cloaking jako prezentowanie użytkownikom i wyszukiwarkom różnej treści — “Cloaking refers to the practice of presenting different content to users and search engines” (tłumaczenie) „cloaking to praktyka prezentowania różnej treści użytkownikom i wyszukiwarkom” — w celu manipulowania rankingiem. Google wskazuje też wstawianie tekstu lub słów kluczowych tylko wtedy, gdy odbiorcą jest wyszukiwarka — “Inserting text or keywords into a page only when the user agent that is requesting the page is a search engine, not a human visitor” (tłumaczenie) „wstawianie tekstu lub słów kluczowych tylko wtedy, gdy stronę pobiera wyszukiwarka, a nie człowiek”.
- Testy A/B oparte na stronach są bezpieczne w Workers. Kierowanie użytkowników według URL-a i stosowanie tej samej reguły wobec każdego odbiorcy jest dozwolone. Rozgałęzianie treści według tożsamości pytającego — bota lub człowieka — nie jest.
Kilka doprecyzowań, bo łatwo tu przesadzić z korektą:
- Sprawdzanie User-Agent nie jest automatycznie cloakingiem. Logowanie ruchu botów albo szybsze serwowanie odpowiedzi z cache dowolnemu klientowi jest w porządku. Granicą jest różnica w treści zależna od tożsamości odbiorcy, wprowadzona w celu manipulowania rankingiem.
- Testy A/B z podziałem stron w Workers są w porządku. Dzielenie użytkowników według URL-a i traktowanie każdego odbiorcy tak samo jest legalne. Dzielenie według tego, kto pyta — bot kontra człowiek — już nie.
Dobry przykład bezpiecznego wzorca: własna bramka podglądu tej witryny jest Workerem, który zwraca 404 dla każdej ścieżki /preview/, chyba że cookie pasuje do sekretu. Bez tego cookie zwraca 404 każdemu — także Googlebotowi. To dokładnie bezpieczny kształt: nie ukrywa jednej rzeczy przed botami, pokazując inną użytkownikom, tylko stosuje jedną regułę bez wyjątków.
Nie polegaj też na kroku pre-renderowania wyłącznie dla botów, nawet jeśli zbudujesz go poprawnie w Workers. Google określiło dynamiczne renderowanie jako “Dynamic rendering was a workaround and not a long-term solution” (tłumaczenie) „dynamiczne renderowanie było obejściem, a nie rozwiązaniem długoterminowym” — w swojej dokumentacji; Worker, który renderuje wstępnie tylko dla botów, dziedziczy tę deprecjację.
Jak Worker może przypadkowo zablokować lub spowolnić Googlebota
To najbardziej specyficzny dla Workers sposób podcięcia gałęzi, na której siedzisz, i zwykle nie wynika z kodu Workera.
Bot Fight Mode działa poza Ruleset Engine
Bot Fight Mode (oraz Super Bot Fight Mode) może generować fałszywe alarmy wobec legalnych crawlerów, w tym Googlebota. Pułapka polega na tym, że Bot Fight Mode jest oceniany w osobnym potoku niż WAF Ruleset Engine, więc zwykłe niestandardowe reguły WAF „allow” lub „skip” go nie omijają. Jeśli Bot Fight Mode rzuca wyzwanie Googlebotowi, nie naprawisz tego regułą allow — musisz zmienić lub wyłączyć sam tryb. (Zanim na tym polegniesz, potwierdź bieżące działanie w dokumentacji Cloudflare: Bot Fight Mode i Super Bot Fight Mode — produkty botowe się zmieniają.)
Wzorzec niestandardowej reguły zweryfikowanych botów
Cloudflare udostępnia pole cf.client.bot oraz wzorzec reguły zezwalającej dla zweryfikowanych botów, dzięki czemu możesz dopuścić znane, dobre crawlery w swoich regułach niestandardowych — przydatne po stronie WAF, choć (jak wyżej) nie dociera to do Bot Fight Mode.
Sam CDN jest neutralny lub korzystny
Wyjaśnijmy mit: Cloudflare jako CDN nie szkodzi SEO. Własna praca Google z 2024 roku, Crawling December, zauważa, że Google zwiększa częstotliwość crawlowania po wykryciu CDN-u — ale CDN może też przypadkowo zablokować Googlebota przez reguły WAF lub botów, a odpowiedź 503 jest lepsza niż interstitial z weryfikacją bota. Ryzykiem jest źle skonfigurowany Worker albo ustawienie botów, nie sama infrastruktura.
Sprawdzanie, co naprawdę otrzymał Googlebot
Po każdym wdrożeniu Workera potwierdź, co faktycznie dostał crawler — nie zakładaj tego:
- GSC URL Inspection → Test Live URL. Pobiera stronę jako Google i pokazuje wyrenderowany HTML, więc możesz potwierdzić, że wstrzyknięte canonical/hreflang/JSON-LD rzeczywiście są obecne.
- Sprawdź
CF-Cache-Statusobok HTML.HIT/MISS/EXPIREDpokazuje, czy oglądasz świeżą odpowiedź Workera, czy odpowiedź z cache — to najszybszy sposób wykrycia sytuacji, w której „zmiana się nie pojawiła”, a problemem jest warstwa cache. - Pobierz stronę bezpośrednio jako Googlebot. Wyślij żądanie z user agentem Googlebota i porównaj wyniki — pamiętaj jednak, że zgodny ciąg znaków niczego nie dowodzi; prawdziwego Googlebota weryfikuj przez odwrotne i zwykłe DNS względem opublikowanych zakresów Google (zobacz kartę Scripts).
Higiena wdrożeń właściwa dla Workers
Udane wrangler deploy mówi, że skrypt został wysłany — nie mówi, że Googlebot otrzymuje właściwy wyrenderowany wynik. Traktuj każdą zmianę Workera wpływającą na SEO jak wydanie z rejestrem, a nie tylko jak push:
- Ogranicz zakres tras. Nie uruchamiaj Workera domyślnie na
/*. Dopasuj go do potrzebnych ścieżek we wzorcach traswrangler.toml, aby błąd nie mógł wyłączyć całej witryny. - Sprawdź bieżące limity, zanim obiecasz skalę. Limity czasu CPU, liczby podżądań i rozmiaru skryptu zależą od planu i zmieniają się z czasem — przed zaprojektowaniem przepisywania pod konkretny próg sprawdź aktualną stronę limitów Cloudflare, zamiast polegać na zapamiętanej liczbie.
- Zapisz metadane wersji wydania. Model wersji i wdrożeń Cloudflare śledzi wersję źródłową, datę zgodności, bindingi i trasy każdego wdrożenia — zanotuj, która wersja działa na której trasie, aby twierdzenie „Worker robi X” można było sprawdzić względem wdrożenia, a nie edytora.
- Wersjonuj i wycofuj przez środowiska Wranglera. Wdróż na środowisko stagingowe, stopniowo zwiększaj procent ruchu i zachowaj możliwość natychmiastowego powrotu do poprzedniej wersji.
- Używaj logów zakresowych do obserwacji wdrożenia, pamiętając o ich ograniczeniach. Workers Logs i śledzenie logów mogą pomagać w debugowaniu stopniowego wdrożenia, ale logi są próbkowane i przechowywane przez ograniczony czas — traktuj je jako dowód ograniczony do przechwyconych żądań, a nie pełny zapis każdej wizyty crawlera.
- Ustal warunek zatrzymania i przetestuj wycofanie, zanim będzie potrzebne. Z góry zdecyduj, jakie zaobserwowane zachowanie (wskaźnik błędów, zła odpowiedź w kontroli punktowej, spadek crawlowania) zatrzymuje wdrożenie i potwierdź, że ścieżka wycofania działa, zamiast to zakładać.
- Czyść cache jako część wdrożenia. Ponieważ działają trzy warstwy cache, czyszczenie lub unieważnienie musi być jawnym krokiem wysyłki zmiany, a nie czynnością po fakcie.
Uwaga o Bing i jeden kierunek na przyszłość
Bing również nie ma wskazówek dotyczących konkretnie Cloudflare ani edge. Ponieważ jednak wdrożenie Workera jest natychmiastowe, a crawlowanie nie, naturalnym uzupełnieniem jest IndexNow — uruchom je natychmiast po wysłaniu tabeli przekierowań lub zmiany tagu sterowanej przez Workera, aby Bing (i inne uczestniczące wyszukiwarki) szybko ponownie wykonały crawl. Warto też zwrócić uwagę, że Cloudflare udostępnił kanonikalizację wymuszaną na brzegu jako funkcję produktu („Redirects for AI Training”) — zweryfikowane crawlery szkolące AI otrzymują 301 do canonical za pomocą jednego przełącznika. To użyteczne porównanie z ręcznym pisaniem logiki canonical we własnym Workerze oraz przypomnienie, że „serwowanie crawlerom czegoś innego niż użytkownikom” to wzorzec, wobec którego Microsoft publicznie wyrażał sceptycyzm przy innych funkcjach Cloudflare dla crawlerów AI — dobry test zdroworozsądkowy dla każdego Workera zależnego od bota.
Jeśli interesuje cię szerszy obraz — porównanie platform, Snippets kontra Workers oraz kwestie kolejki deweloperskiej i zarządzania — wróć do huba Edge SEO.
Podsumowanie AI
Skrócona wersja wariantu Advanced:
- Cloudflare Workers SEO to techniczne SEO wykonywane w środowisku V8 isolate Cloudflare. To kodowa, właściwa dla Workers implementacja ogólnej koncepcji Edge SEO — definicję, porównanie platform i pełne omówienie cloakingu znajdziesz w hubie.
- Worker widzi tylko to, co pasuje do jego trasy. Konfiguracja trasy/domeny i pierwszeństwo decydują, które żądania w ogóle docierają do handlera
fetch— przed zaufaniem zachowaniu Workera dla URL-a potwierdź trasę i wdrożoną wersję. - Jeden handler
fetch, trzy fazy: przepisanie żądania, przepisanie nagłówków odpowiedzi i przepisanie treści odpowiedzi. Przepisywanie treści przechodzi przezHTMLRewriter— prawdziwy mechanizm wstrzykiwania canonical, poprawiania hreflang i dodawania JSON-LD. Uczyń je idempotentnym i testuj brakujące, zduplikowane, zniekształcone oraz nie-HTML-owe odpowiedzi, nie tylko szczęśliwą ścieżkę. - Przekierowania: KV do szybkich wyszukiwań kluczy, D1 do konfiguracji relacyjnej, Bulk Redirects/Rules do małych zestawów statycznych. Patrick preferuje przekierowania brzegowe zamiast serwerowych — ale wybierz jednego właściciela URL-a, bo przekierowanie Workera, Bulk Redirect, Redirect Rule i przekierowanie originu mogą zadziałać na tej samej ścieżce.
- Trzy cache dzielą jedno słowo: Workers Cache API (
caches.default), cache brzegowy Cloudflare iCache-Controloriginu — ich pomieszanie powoduje „moja zmiana się nie pojawiła”. Diagnozuj według klucza cache, warstwy, TTL i unieważnienia, zamiast zgadywać. - Wytyczne Google dotyczące cache ETag/If-None-Match/304 (grudzień 2024) można zastosować bezpośrednio: Worker kontrolujący odpowiedź może sam zakończyć ją kodem 304, ale agresywne
max-agemoże opóźnić ponowne crawlowanie właśnie zmienionej strony. - Zasada cloakingu: identyczna logika dla każdego odbiorcy. Sprawdzanie UA nie jest automatycznie cloakingiem; jest nim różnica treści zależna od tożsamości odbiorcy, służąca manipulacji rankingiem.
- Największe ryzyko stworzone przez siebie: Bot Fight Mode działa poza WAF Ruleset Engine, więc zwykłe reguły allow do niego nie docierają — musisz zmienić sam tryb.
- Wdrażaj rozważnie: przed obietnicą skali sprawdź limity planu, przy każdym wydaniu zapisuj metadane wersji (datę zgodności, bindingi i trasy), obserwuj wdrożenie logami zakresowymi (próbkowanymi, niepełnymi) i ustal warunek zatrzymania z przetestowanym wycofaniem.
- Weryfikuj przez GSC URL Inspection (Test Live URL) i nagłówek
CF-Cache-Status; przy ciężkich przepisaniach pilnuj limitów CPU (10 ms bezpłatny / 30 ms płatny).
Dokumentacja oficjalna
Nie ma dokumentacji SEO Google ani Bing dotyczącej konkretnie Cloudflare Workers — nadrzędne wytyczne są ogólne. Najbardziej użyteczne źródła pierwotne dzielą się między wyszukiwarki (polityka i cache) a Cloudflare (API środowiska uruchomieniowego).
Google (ma zastosowanie do każdej implementacji brzegowej)
- Polityki spamu — cloaking — twarda granica, której musi przestrzegać każda logika Workera.
- Crawling December: cache HTTP (2024) — ETag / If-None-Match / 304 / max-age, bezpośrednio przydatne dla Workera kontrolującego odpowiedź.
- Crawling December: CDN-y i crawlowanie (2024) — wpływ CDN-u na częstotliwość crawlowania i możliwość blokowania Googlebota przez reguły botów.
- Dynamiczne renderowanie (wycofane) — dlaczego Worker renderujący tylko dla botów dziedziczy wycofany wzorzec.
- Przegląd crawlerów i fetcherów Google — user agenty i opublikowane zakresy IP do weryfikacji.
Cloudflare (środowisko uruchomieniowe)
- HTMLRewriter — API strumieniowego parsera HTML.
- Cache API —
caches.default/caches.open(). - Jak działa cache — Cache API kontra cache brzegowy.
- Trasy i domeny — dopasowanie tras, pierwszeństwo i to, które żądania rzeczywiście uruchamiają Workera.
- Bulk Redirects — bezkodowy system przekierowań, który może kolidować lub nakładać się na przekierowanie Workera.
- Limity Workers — bieżące limity CPU, podżądań i rozmiaru skryptu; zależne od planu i daty, więc sprawdzaj je bezpośrednio.
- Wersje i wdrożenia — wdrożenia wersjonowane/stopniowe i wycofywanie.
- Workers Logs — logi wywołań, śledzenie i ograniczenia próbkowania/przechowywania.
- Bot Fight Mode / Super Bot Fight Mode — ustawienia botów mogące zablokować Googlebota.
- Zezwalanie na ruch zweryfikowanych botów — wzorzec reguły niestandardowej z
cf.client.bot.
Bing — nie ma strony dotyczącej edge/Workers; IndexNow jest właściwym uzupełnieniem do natychmiastowego ponownego crawlowania po wdrożeniu.
Cytaty ze źródeł
Wypowiedzi przypisane konkretnym źródłom. Każdy link Google jest głębokim odnośnikiem prowadzącym do cytowanego fragmentu.
Google — granica cloakingu
- “Cloaking refers to the practice of presenting different content to users and search engines with the intent to manipulate search rankings and mislead users.” (tłumaczenie) „Cloaking to praktyka prezentowania użytkownikom i wyszukiwarkom różnej treści w celu manipulowania rankingami i wprowadzania użytkowników w błąd”. — Google Search Central, Polityki spamu w wyszukiwarce Google. Przejdź do cytatu
- “Inserting text or keywords into a page only when the user agent that is requesting the page is a search engine, not a human visitor” (tłumaczenie) „Wstawianie tekstu lub słów kluczowych na stronę tylko wtedy, gdy żąda jej wyszukiwarka, a nie człowiek” — podany jako przykład cloakingu. Przejdź do cytatu
Google — cache HTTP (Crawling December, 2024)
- “Google’s crawling infrastructure supports heuristic HTTP caching as defined by the HTTP caching standard, specifically through the ETag response- and If-None-Match request header, and the Last-Modified response- and If-Modified-Since request header.” (tłumaczenie) „Infrastruktura crawlowania Google obsługuje heurystyczne buforowanie HTTP zgodnie ze standardem cache HTTP, w szczególności przez nagłówek odpowiedzi ETag i nagłówek żądania If-None-Match oraz nagłówek odpowiedzi Last-Modified i nagłówek żądania If-Modified-Since”. Przejdź do cytatu
- “We strongly recommend using ETag because it’s less prone to errors and mistakes (the value is not structured unlike the Last-Modified value).” (tłumaczenie) „Zdecydowanie zalecamy używanie ETag, ponieważ jest mniej podatny na błędy i pomyłki — jego wartość, w przeciwieństwie do Last-Modified, nie ma określonej struktury”. Przejdź do cytatu
- “If the ETag value sent by the crawler matches the current value the server generated, your server should return an HTTP 304 (Not modified) status code with no HTTP body.” (tłumaczenie) „Jeśli wartość ETag przesłana przez crawler odpowiada bieżącej wartości wygenerowanej przez serwer, serwer powinien zwrócić kod stanu HTTP 304 (Not modified) bez treści HTTP”. Przejdź do cytatu
- “While not required, consider also setting the max-age field of the Cache-Control header to help crawlers determine when to recrawl the specific URL.” (tłumaczenie) „Choć nie jest to wymagane, rozważ też ustawienie pola max-age nagłówka Cache-Control, aby pomóc crawlerom określić, kiedy ponownie pobrać dany URL”. Przejdź do cytatu
Google — dynamiczne renderowanie (wycofane)
- “Dynamic rendering was a workaround and not a long-term solution for problems with JavaScript-generated content in search engines.” (tłumaczenie) „Dynamiczne renderowanie było obejściem, a nie długoterminowym rozwiązaniem problemów z treścią generowaną przez JavaScript w wyszukiwarkach”. Przejdź do cytatu
Ja — o przekierowaniach na brzegu
- “I typically prefer to have redirects on the edge (CDN-level) over having them on the server.” (tłumaczenie) „Zwykle wolę utrzymywać przekierowania na brzegu sieci, na poziomie CDN, niż na serwerze”. — z mojego przewodnika Ahrefs 11 typów przekierowań i ich wpływ na SEO. Przekazane z mojego opublikowanego artykułu; sformułowanie jest moje, ale przed potraktowaniem go jako ścisłego cytatu potwierdź dokładne brzmienie na stronie.
Cloudflare / SALT.agency — dlaczego Workers do przekierowań
- “we needed to implement simple redirects, which should be easy to create on the majority of platforms but wasn’t supported” (tłumaczenie) „musieliśmy wdrożyć proste przekierowania, które na większości platform powinny być łatwe do utworzenia, ale nie były obsługiwane”. — Igor Krestov i Dan Taylor, Techniczne SEO z wykorzystaniem workerów Cloudflare (blog Cloudflare). Przekazane za pośrednictwem podsumowania wpisu Cloudflare, niepotwierdzone jako dokładny podciąg — zweryfikuj ponownie na stronie przed użyciem jako ścisłego cytatu blokowego.
Którego narzędzia użyć?
„Muszę dodać przekierowania.”
- Mały, statyczny zestaw (kilkadziesiąt, bez logiki)? → Cloudflare Bulk Redirects albo Redirect Rules. Bez Workera i bez kodu.
- Tysiące przekierowań po kluczu URL-a? → Worker + KV.
- Przekierowania relacyjne (per lokalizacja, per segment, odpytywane)? → Worker + D1.
- Trzeba jednocześnie przekierować i przepisać nagłówki? → Worker (Rules nie potrafią zrobić obu rzeczy).
„Muszę wstrzyknąć albo poprawić tag (canonical, hreflang, title, JSON-LD).”
- → Worker z
HTMLRewriter. Cloudflare nie ma bezkodowego produktu do dowolnego przepisywania treści odpowiedzi; to zadanie Workers.
„Po dodaniu Cloudflare spadło crawlowanie Googlebota.”
- Najpierw podejrzewaj Bot Fight Mode / Super Bot Fight Mode, a nie Workera. Sprawdź, czy rzuca wyzwanie Googlebotowi — i pamiętaj, że reguła allow WAF tego nie naprawi; trzeba zmienić sam tryb.
- Następnie sprawdź niestandardowe reguły WAF oraz to, czy botom jest serwowane
503lub interstitial. - Dopiero potem przeprowadź audyt kodu Workera i zakresu tras.
„Wstrzyknięty tag się nie pojawia.”
- Sprawdź
CF-Cache-Status.HIT/EXPIRED? Oglądasz odpowiedź z cache — wyczyść właściwą warstwę (Workers Cache API albo cache brzegowy) i przetestuj ponownie. MISSi nadal źle? Teraz problemem jest logika Workera albo zakres trasy. Potwierdź przez GSC URL Inspection.
„Czy powinienem renderować wstępnie tylko dla botów na Workerze?”
- → Nie. To dynamiczne renderowanie, które Google wycofało. Preferuj SSR lub renderowanie statyczne stosowane do wszystkich.
Lista kontrolna SEO Cloudflare Workers
Zanim wdrożysz Workera przepisującego odpowiedź
- Trasa jest ograniczona do potrzebnych ścieżek w
wrangler.toml— nie ustawiona odruchowo na/*— i potwierdziłeś, która wdrożona wersja faktycznie działa na tej trasie. - Worker stosuje identyczną logikę do każdego odbiorcy (brak rozgałęzienia treści bot kontra człowiek).
- Handlery
HTMLRewritersą idempotentne i przetestowane dla brakującego tagu, istniejącego tagu zduplikowanego/zniekształconego oraz odpowiedzi nie-HTML — nie tylko dla szczęśliwej ścieżki. - W przypadku przekierowań wybrałeś właściwe narzędzie: Bulk Redirects/Rules (małe/statyczne), KV (po kluczu URL przy skali) albo D1 (relacyjne) — i potwierdziłeś, że inny system przekierowań nie jest już właścicielem tego URL-a.
- Bieżące limity planu (CPU, podżądania, rozmiar skryptu) sprawdzono bezpośrednio, a nie zapamiętano.
-
Cache-Controldla przepisywanego HTML nie jest tak agresywny, aby opóźniać ponowne crawlowanie zmienionych stron. - Metadane wersji (data zgodności, bindingi, trasy) zapisano dla wydania, wraz z przetestowaną ścieżką wycofania i zdefiniowanym warunkiem zatrzymania wdrożenia.
Kontrola cache
- Wiesz, której z trzech warstw (Workers Cache API / cache brzegowy /
Cache-Controloriginu) dotykasz. - Jeśli Worker kontroluje odpowiedź, ustawia poprawny
ETagi może zakończyć ją kodem304. - Czyszczenie lub unieważnienie cache jest jawnym krokiem wdrożenia.
Dostęp botów
- Bot Fight Mode / Super Bot Fight Mode nie rzuca wyzwania Googlebotowi (sprawdzono bezpośrednio — reguła allow WAF nie nadpisuje tego trybu).
- Niestandardowa reguła zweryfikowanych botów (
cf.client.bot) jest gotowa, jeśli stosujesz ograniczenia po stronie WAF. - Gdy trzeba spowolnić boty, otrzymują
503, a nie interstitial z weryfikacją.
Weryfikacja po wdrożeniu
- GSC URL Inspection → Test Live URL potwierdza, że wstrzyknięty tag znajduje się w wyrenderowanym HTML.
- Sprawdzono
CF-Cache-Status(HIT/MISS/EXPIRED), więc wiadomo, czy oglądasz kopię z cache. - Uruchomiono IndexNow (Bing/inne wyszukiwarki), jeśli właśnie wdrożono tabelę przekierowań lub zmianę tagu.
- Wersjonowanie wykonano przez środowiska Wranglera i przetestowano ścieżkę wycofania.
Modele mentalne
1. Jeden handler, trzy fazy.
Każdy Worker jest handlerem fetch i wszystko, co robisz, mieści się kolejno w jednej z trzech faz: przepisanie żądania → przepisanie nagłówków odpowiedzi → przepisanie treści odpowiedzi (HTMLRewriter). Zanim napiszesz choć jedną linię, umieść planowaną zmianę w tej sekwencji.
2. „Cache” to trzy rzeczy, nie jedna.
Workers Cache API (caches.default) ≠ cache brzegowy Cloudflare ≠ Cache-Control originu. Gdy zmiana „się nie pojawia”, najpierw zapytaj, na którą warstwę naprawdę patrzysz, zanim ruszysz kod.
3. Test cloakingu: tożsamość kontra logika. Rozgałęzienie według tego, kto pyta, które zmienia treść, = cloaking. Stosowanie tej samej logiki do wszystkich — nawet jeśli logika sprawdza UA do celów logowania albo szybkości — jest w porządku. Zapytaj: „czy prawdziwy użytkownik dostałby dokładnie to, co Googlebot?”
4. Kolejność podejrzanych przy spadku crawlowania. Bot Fight Mode → reguły WAF → kod Workera → zakres trasy. Ustawienia botów działają w potoku, do którego nie docierają reguły allow, więc najpierw podejrzewaj właśnie je.
5. Worker kontroluje odpowiedź, więc kontroluje semantykę cache.
Jeśli Worker generuje lub przepisuje treść, odpowiada za ETag, 304 i max-age. To jednocześnie możliwość (samodzielne zakończenie odpowiedzi kodem 304) i ryzyko (zbyt długi cache opóźniający ponowne crawlowanie).
SEO Cloudflare Workers — ściąga
Wybór narzędzia do przekierowań
| Sytuacja | Użyj |
|---|---|
| Kilkadziesiąt statycznych przekierowań | Bulk Redirects / Redirect Rules (bez kodu) |
| Tysiące, według URL-a | Worker + KV |
| Relacyjne / per lokalizacja, odpytywane | Worker + D1 |
| Przekierowanie i jednoczesne przepisywanie nagłówków | Worker |
Trzy cache
| Warstwa | Czym jest | Dostęp |
|---|---|---|
| Workers Cache API | Programowalny cache zakresu Workera | caches.default, caches.open() |
| Cache brzegowy Cloudflare | Cache CDN | reguły cache / czyszczenie |
Originowe Cache-Control | Nagłówki odpowiedzi | twój origin lub Worker |
API handlera HTMLRewriter
getAttribute/setAttribute— odczyt/ustawienie atrybutu tagu (np.hrefcanonical).prepend/append— dodanie oznaczeń wewnątrz elementu (np. tagu dohead).setInnerContent— zastąpienie treści elementu.replace— całkowita zamiana elementu.
Szybkie fakty
- Limit CPU: 10 ms bezpłatnie / 30 ms płatnie (oczekiwanie zegarowe na
fetchsię nie liczy). - Cloaking = różnica treści zależna od tożsamości odbiorcy, służąca manipulowaniu rankingiem — nie samo „odczytanie UA przez Workera”.
- Bot Fight Mode działa poza WAF Ruleset Engine — reguły allow do niego nie docierają; zmień tryb.
- Weryfikacja zmiany Workera: GSC Test Live URL + nagłówek
CF-Cache-Status. - Google zaleca
ETag; pasujący ETag → zwróć 304 bez treści.
Sprawdź, co rzeczywiście otrzymał Googlebot — po wdrożeniu Workera
Pobierz stronę jako Googlebot i porównaj (shell)
# Fetch as a normal browser
curl -sS -A "Mozilla/5.0" https://example.com/page/ -o user.html -D user.headers
# Fetch as Googlebot's UA
curl -sS -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" \
https://example.com/page/ -o bot.html -D bot.headers
# The bodies should be identical — a diff is a cloaking red flag
diff user.html bot.html && echo "identical (good)"
# Check what cache layer served it
grep -i "cf-cache-status" bot.headers # HIT / MISS / EXPIREDPotwierdź prawdziwego Googlebota (ciągi UA można łatwo podrobić) — odwrotny i zwykły DNS
# 1) Reverse DNS the IP from your logs — must end in googlebot.com / google.com
host 66.249.66.1
# 2) Forward DNS that hostname back — must resolve to the same IP
host crawl-66-249-66-1.googlebot.comJeśli którakolwiek kontrola się nie powiedzie, to nie jest Googlebot. Możesz też porównać adres z opublikowanymi przez Google zakresami w pliku googlebot.json.
Odczytaj wstrzyknięte tagi z wyrenderowanego HTML (konsola DevTools)
// Paste into the browser console on the live page to confirm your Worker's injection
[...document.querySelectorAll('link[rel="canonical"]')].map(l => l.href);
[...document.querySelectorAll('link[rel="alternate"][hreflang]')]
.map(l => `${l.hreflang} -> ${l.href}`);
[...document.querySelectorAll('script[type="application/ld+json"]')].map(s => s.textContent);Minimalne zakończenie ETag / 304 wewnątrz Workera
export default {
async fetch(request, env, ctx) {
const res = await fetch(request);
const body = await res.text();
const etag = `"${await sha1(body)}"`; // your hash of choice
if (request.headers.get("If-None-Match") === etag) {
return new Response(null, { status: 304 }); // no body, per Google's guidance
}
const headers = new Headers(res.headers);
headers.set("ETag", etag);
return new Response(body, { ...res, headers });
},
}; Narzędzia do budowania i weryfikowania SEO Workers
- Wrangler — CLI Cloudflare do tworzenia, wersjonowania i wdrażania Workers (zakres tras, środowiska, wycofanie, sekrety). Tu znajduje się higiena wdrożeń.
- HTMLRewriter — wbudowany strumieniowy parser HTML; API do całego przepisywania treści.
- Workers KV / D1 — magazyn tabel przekierowań i konfiguracji (KV do wyszukiwania kluczy, D1 do SQL).
- GSC URL Inspection → Test Live URL — pobiera i renderuje stronę jako Google, aby potwierdzić, że wstrzyknięty canonical/hreflang/JSON-LD faktycznie trafił do odpowiedzi.
- Nagłówek
CF-Cache-Status(przezcurl -Ilub Network w DevTools) — pokazujeHIT/MISS/EXPIRED, więc wiesz, czy oglądasz kopię z cache, czy świeżą odpowiedź Workera. - IndexNow — powiadamia Bing i inne uczestniczące wyszukiwarki natychmiast po wdrożeniu zmiany sterowanej przez Workera.
- Analiza logów serwera — źródło prawdy o tym, czy prawdziwy (zweryfikowany) Googlebot w ogóle dociera do tras Workera.
Audyt Workera pod kątem spójności SEO i zachowania cache
Review this Cloudflare Worker fetch handler as an SEO edge change. Trace the request,
response-header, body-rewrite, redirect, and caching paths. Return:
1. Every branch based on user agent, bot status, cookie, geography, or request header
2. Whether Googlebot/no-cookie traffic can receive different indexable content or SEO tags
3. HTMLRewriter selectors that fail when a tag is missing or create duplicates
4. Redirect lookups that can chain, loop, or fall through unexpectedly
5. Each use of the Cache API, Cloudflare edge cache behavior, and origin Cache-Control—kept as separate layers
6. Cache keys that could mix variants or preserve a stale canonical/robots/header change
7. A minimal test matrix for users, verified bots, cache hit/miss, and representative URLs
Apply the same content and SEO logic to bots and users. Flag intentional personalization
for human review rather than calling it cloaking automatically. Do not invent Cloudflare
settings, bindings, routes, cache rules, or origin behavior that are not in my input.
Worker code, bindings, routes, and relevant cache/security configuration:
[PASTE INPUT]Przejrzyj zmianę HTMLRewriter przed wdrożeniem
Audit this HTMLRewriter implementation for one SEO task: [CANONICAL / HREFLANG / JSON-LD].
Check whether it handles existing, missing, and duplicate elements; produces valid absolute
URLs or JSON; applies to the intended route cohort; and behaves identically for every
requester. Then return corrected code plus raw-response and rendered-response tests.
Do not add product, organization, locale, URL, or schema facts that are not supplied.
Code and expected per-route output:
[PASTE INPUT] Sprawdź się: SEO Cloudflare Workers
Pięć krótkich pytań o techniczne SEO z użyciem Cloudflare Workers. Wybierz odpowiedź na każde, a potem sprawdź wynik.
Zasoby warte uwagi
Moje powiązane teksty
- 11 typów przekierowań i ich wpływ na SEO (Ahrefs) — możliwości przekierowań w Cloudflare oraz powody, dla których wolę przekierowania brzegowe od serwerowych.
- Przewodnik dla początkujących po technicznym SEO (Ahrefs) — miejsce zmian brzegowych w szerszym obrazie.
- Problemy z SEO JavaScriptu i dobre praktyki (Ahrefs) — część dotycząca renderowania, istotna przy każdej pokusie pre-renderowania na brzegu.
Moje wystąpienia
- Dopracuj techniczne SEO, szybkość strony i bezpieczeństwo (wywiad Marketing Speak) — omawiam tam użycie Cloudflare Workers do przepisywania odpowiedzi, zanim użytkownik zobaczy stronę, oraz przeniesienie przekierowań do CDN-u. Transkrypcja wywiadu mówionego; konkretne sformułowania traktuj jako parafrazę, a nie dosłowne cytaty.
Z branży
- Techniczne SEO z wykorzystaniem workerów Cloudflare — Igor Krestov (agencja SALT) i Dan Taylor na blogu Cloudflare; źródło wzorca łańcucha filtrów (żądanie/odpowiedź/treść).
- Czym jest edge SEO? (Search Engine Land) — koncepcja omawiana przez nadrzędny hub tego artykułu, w ujęciu zewnętrznym.
- Edge SEO (Dan Taylor) — tekst autora, który ukuł termin na podstawie badań Cloudflare Workers.
- HTMLRewriter (dokumentacja Cloudflare) — kanoniczne źródło informacji o API przepisywania treści.
- Jak działa cache (dokumentacja Cloudflare) — rozdziela Cache API od cache brzegowego.
- Przekierowania na potrzeby trenowania AI (blog Cloudflare) — kanonikalizacja wymuszana na brzegu jako funkcja produktu, przydatne porównanie z ręcznym pisaniem jej w Workerze.
Czytaj szerzej / z innej strony
- Edge SEO — nadrzędny hub: ogólna koncepcja, porównanie platform, Snippets kontra Workers i pełna zasada cloakingu.
Dziennik zmian
Zaktualizowano 10 sie 2026.
Podsumowanie redakcyjne i zapisane szczegóły zmian.Szczegóły zmian
-
Szczegółowe uwagi dotyczące zmian są obecnie dostępne po angielsku.
Pełne porównanie jest niedostępne — dla tej wersji nie zarchiwizowano wcześniejszej migawki.
Zaktualizowano 18 lip 2026.
Podsumowanie redakcyjne i zapisane szczegóły zmian.Szczegóły zmian
-
Szczegółowe uwagi dotyczące zmian są obecnie dostępne po angielsku.
-
Szczegółowe uwagi dotyczące zmian są obecnie dostępne po angielsku.
Pełne porównanie jest niedostępne — dla tej wersji nie zarchiwizowano wcześniejszej migawki.