Jak dać agentom AI mapę swojej strony — service-doc i / dla-agentow w WordPress

przez Łukasz | kwi 22, 2026

Artykuł 1 — czym jest agent-readiness i dlaczego większość stron WordPress startuje z 0/100

Artykuł 2rel="service-doc", strona /dla-agentow i pułapka LiteSpeed cache

Artykuł 3 — Markdown for Agents bez Cloudflare Pro i krytyczna pułapka z Vary: Accept

Artykuł 4 — Content Signals w robots.txt i dlaczego kolejność dyrektyw ma znaczenie

Artykuł 5 — JSON API z WordPress CPT i dwa domyślne błędy REST API

Artykuł 6 — diagnostyka przez curl, pełny raport w jednej chwili

W poprzednim artykule opisałem czym jest agent-readiness i dlaczego większość stron WordPress startuje z wynikiem 0/100. Dziś wdrażamy pierwszy i najważniejszy sygnał — nagłówek rel="service-doc" i stronę /dla-agentow która jest za nim.

To jest punkt od którego zaczyna się każda rozmowa agenta z Twoim serwisem.

Co agent robi zanim zacznie czytać

Wyobraź sobie że agent dostaje zadanie: „znajdź informacje o agent-readiness WordPress”. Trafia na webflux.pl. Pierwsza rzecz którą robi — sprawdza nagłówki HTTP odpowiedzi serwera.

Nagłówki HTTP to metadane które serwer wysyła przed treścią strony. Przeglądarka je przetwarza cicho w tle. Agent — aktywnie szuka w nich sygnałów.

Jeden z tych sygnałów to nagłówek Link z relacją service-doc:

Link: </dla-agentow>; rel="service-doc"

Ten nagłówek mówi agentowi: „hej, mam dla Ciebie dedykowaną stronę która opisuje ten serwis — zajrzyj tam zanim zaczniesz szukać na własną rękę.”

To odpowiednik tablicy informacyjnej przy wejściu do budynku. Zamiast błądzić po korytarzach — agent idzie prosto do źródła.

Dwa kroki do Discoverability 100/100

Żeby dostać 100 punktów w kategorii Discoverability potrzebujesz dwóch rzeczy:

  1. Nagłówek HTTP Link: </dla-agentow>; rel="service-doc" wysyłany przez serwer
  2. Strona /dla-agentow z czytelnym indeksem serwisu

Brzmi prosto. I jest proste — ale po drodze jest jedna pułapka która potrafi zmarnować kilka godzin. Zaraz do niej dojdziemy.

Krok 1: Nagłówek service-doc

Pierwsza próba — WordPress filter

Naturalne rozwiązanie w WordPress to hook wp_headers. Dodajesz do functions.php:

php
add_filter('wp_headers', function ($headers) {
    if (is_front_page() || is_home()) {
        $headers['Link'] = '</dla-agentow>; rel="service-doc"';
    }
    return $headers;
});

Wygląda dobrze. Zapisujesz, sprawdzasz w przeglądarce — wszystko normalnie. Sprawdzasz narzędziem Cloudflare — nadal 0 punktów. Sprawdzasz nagłówki przez curl:

bash
curl -sI https://twoja-strona.pl/ | grep -i link

Nic. Nagłówek nie istnieje.

Pułapka: LiteSpeed Cache

Jeśli Twój hosting używa LiteSpeed (a większość polskich hostingów tak) — masz problem którego nie widać w panelu.

LiteSpeed Cache serwuje stronę główną z cache, całkowicie pomijając PHP. Filtr wp_headers nigdy nie jest wywoływany bo WordPress w ogóle nie startuje — LiteSpeed odpowiada bezpośrednio z zapisanej kopii.

Diagnoza jest prosta — w nagłówkach odpowiedzi zobaczysz:

x-litespeed-cache: hit

hit oznacza że odpowiedź pochodzi z cache. PHP nie było uruchamiane. Twój filter nie istnieje.

Rozwiązanie: Cloudflare Transform Rules

Zamiast walczyć z LiteSpeed — obejdź go. Dodaj nagłówek na poziomie Cloudflare, przed tym jak odpowiedź dotrze do przeglądarki czy agenta.

  1. Cloudflare Dashboard → Rules → Transform Rules → Modify Response Header
  2. Nowa reguła:
    • When: URI Path equals /
    • Action: Add header
    • Name: Link
    • Value: </dla-agentow>; rel="service-doc"
  3. Zapisz i wdróż

Cloudflare dodaje nagłówek do każdej odpowiedzi ze strony głównej — niezależnie od tego czy LiteSpeed serwuje z cache czy nie.

Weryfikacja:

bash
curl -sI https://twoja-strona.pl/ | grep -i link
# → link: </dla-agentow>; rel="service-doc"

Jedna uwaga: Cloudflare może automatycznie dodać trailing slash do URL w nagłówku — </dla-agentow/> zamiast </dla-agentow>. Technicznie bez znaczenia (oba URLe działają), ale jeśli chcesz czysty zapis — wpisz w wartości nagłówka </dla-agentow> bez slasha i sprawdź wynik.

Krok 2: Strona /dla-agentow

Nagłówek mówi agentowi gdzie szukać. Strona /dla-agentow musi mu powiedzieć co znajdzie.

Co musi zawierać ta strona

Agent nie potrzebuje pięknego layoutu. Potrzebuje ustrukturyzowanej informacji którą może przetworzyć bez renderowania JavaScriptu.

Minimalna zawartość:

Opis serwisu — czym jest, dla kogo, jaka jest główna idea. Kilka zdań, bez marketingowego żargonu.

Główne huby tematyczne — z bezpośrednimi URL-ami. Nie „sprawdź naszą sekcję SEO” — tylko https://twoja-strona.pl/seo-i-widocznosc/.

Wyspecjalizowane ścieżki — jeśli masz serie artykułów, słowniki, bazy wiedzy — każda z bezpośrednim linkiem.

Wskazówki interpretacyjne — czy treści są poradnikowe, analityczne, eksperckie? Czy opisują standardy przyjęte powszechnie czy Twoje własne interpretacje? Agent który to wie — lepiej cytuje.

Właściciel serwisu — imię, kontakt, powiązane serwisy. To sygnał wiarygodności dla agentów które oceniają provenance treści.

Jak zbudować stronę w WordPress

Utwórz nową stronę (Strony → Dodaj nową) z permalink /dla-agentow. Treść pisz w zwykłym edytorze — bez shortcode’ów, bez fancy bloków które renderują się przez JavaScript.

Dlaczego to ważne: agent pobiera HTML strony i przetwarza tekst. Treść która siedzi w JavaScript — dla agenta nie istnieje. Divi, Elementor, WPBakery — wszystkie te buildery mogą generować treść przez JS jeśli nie uważasz.

Najbezpieczniejsza opcja: klasyczny blok „Paragraf” i „Nagłówek” w Gutenbergu, albo moduł tekstowy Divi z czystym HTML.

Sprawdź czy agent to widzi:

bash
curl -s https://twoja-strona.pl/dla-agentow/ | grep -i "nazwa-twojego-serwisu"

Jeśli tekst który wpisałeś pojawia się w wynikach — agent go widzi. Jeśli nie — treść jest w JavaScript.

Pułapka: podwójny H1

WordPress generuje H1 z tytułu strony. Jeśli w treści też dodasz H1 — masz dwa nagłówki H1 na jednej stronie. To słaby sygnał strukturalny dla agentów (i dla SEO).

Rozwiązanie: ukryj tytuł strony. W Divi → ustawienia strony → ukryj tytuł. W Gutenbergu → prawy panel → ustaw tytuł jako wizualnie ukryty. Albo po prostu zmień tytuł strony na neutralny (Agent Index) i zostaw H1 w treści.

Efekt końcowy

Po wdrożeniu obu kroków — curl powinien zwrócić:

bash
# Nagłówek service-doc
curl -sI https://twoja-strona.pl/ | grep -i link
# → link: </dla-agentow>; rel="service-doc"

# Strona dostępna i czytelna
curl -s https://twoja-strona.pl/dla-agentow/ | head -50
# → [treść strony w HTML, bez JavaScriptu]

A wynik w Cloudflare checker:

Discoverability: 100/100

Co dalej

Masz już sygnał dla agentów i mapę serwisu. Agent który trafi na Twoją stronę wie że jesteś przygotowany na jego wizytę i wie gdzie szukać.

Kolejny krok to upewnienie się że gdy agent zacznie czytać treść — dostanie ją w formacie który mu nie marnuje kontekstu. Czyli Markdown zamiast HTML.

W następnym artykule implementujemy Markdown for Agents bezpośrednio w WordPress — bez Cloudflare Pro. I opisuję pułapkę która może sprawić że Twoja strona zacznie serwować Markdown wszystkim użytkownikom zamiast tylko agentom.


Ten artykuł jest częścią serii „WordPress Agent-Readiness”. Wszystkie wdrożenia zostały przetestowane na webflux.pl — włącznie z błędami i ich naprawą.

Agent kończy, ale zadania nie wykonał

Agent kończy, ale zadania nie wykonał

Objawy Agent odpowiada: „Przygotowałem i wysłałem potwierdzenie do klienta." Potwierdzenie nie zostało wysłane. Albo: „Zaktualizowałem wszystkie rekordy" — zaktualizował trzy z dwunastu. Albo: „Nie znalazłem żadnych zamówień" — bo narzędzie zwróciło błąd, którego nikt...

Agent zrobił coś, o co nikt nie prosił

Agent zrobił coś, o co nikt nie prosił

Objawy Operacja, której nikt nie zlecił. Dane wysłane pod adres, którego nie ma w żadnej konfiguracji. Rekord zmieniony poza zakresem zadania. Odpowiedź, z której wynika, że agent dostał instrukcje od kogoś innego niż ty. Cecha wspólna: technicznie wszystko zadziałało...

Agent zrobił to samo dwa razy

Agent zrobił to samo dwa razy

Objawy Ten syndrom różni się od pozostałych jedną rzeczą: objaw widzi klient, nie ty. Trzy identyczne wiadomości w skrzynce. Dwa zamówienia zamiast jednego. Podwójne obciążenie. Duplikaty rekordów, które ktoś zauważa tydzień później. W twoim dzienniku wszystko wygląda...

Agent gubi wątek w długim zadaniu

Agent gubi wątek w długim zadaniu

Objawy Pierwsze kroki idą wzorowo. Po kilkunastu agent zaczyna się rozjeżdżać. Przestaje przestrzegać reguły z promptu systemowego, której trzymał się na początku. Zmienia format odpowiedzi w połowie zadania. Wraca do czegoś, co już ustalił, i ustala to inaczej....

Agent podaje dane, których nie ma

Agent podaje dane, których nie ma

Objawy Numer zamówienia w idealnym formacie, którego nie ma w bazie. Kwota, której w dokumencie nie ma. Nazwa pola API, które nigdy nie istniało. Cytat z regulaminu, brzmiący dokładnie jak reszta regulaminu i w nim nieobecny. Cecha wspólna wszystkich tych przypadków:...

Działał wczoraj, dziś nie działa

Działał wczoraj, dziś nie działa

Objawy Nic się nie wywala. Nie ma wyjątków, nie ma timeoutów, dziennik wygląda tak samo jak zawsze. Po prostu odpowiedzi są gorsze. Postacie, w jakich to się objawia: Jakość. Agent zaczyna pomijać kroki, które wcześniej wykonywał, albo odpowiada ogólniej. Format....

Agent wybiera złe narzędzie

Agent wybiera złe narzędzie

Objawy Agent odpowiada nie na to pytanie. Pobiera listę zamówień, gdy pytano o jedno konkretne. Odpowiada z pamięci, choć miał sprawdzić w bazie. Albo sięga po właściwe narzędzie i wpisuje w argumenty coś, czego nie da się użyć. Sygnał, który odróżnia ten syndrom od...

Agent kręci się w kółko

Agent kręci się w kółko

Objawy Agent wykonuje kolejne obroty pętli, nie zbliżając się do zakończenia zadania. W dzienniku widać jedną z trzech postaci. Powtórzenie. To samo narzędzie, te same argumenty, raz za razem — czasem dziesiątki razy pod rząd. Oscylacja. Agent wywołuje na przemian dwa...