dlaczego ruch z chatgpt trafia do direct w ga4
W drugim tygodniu października 2026 roku część właścicieli sklepów internetowych i specjalistów analityki zobaczyła w raportach pozyskiwania ruchu wyraźny spadek odesłań z domeny chatgpt.com i jednoczesny wzrost wejść przypisanych do kanału Direct (ruch bezpośredni). Cedric Huesler z Adobe przeanalizował około 500 stron, na których ChatGPT dawał co najmniej 5 procent wizyt, i porównał dni 9-13 października z tygodniem wcześniejszym. Wizyty z ChatGPT spadły o około 31 tysięcy dziennie, wejścia Direct na tych samych stronach wzrosły o około 26 tysięcy dziennie, a ruch z wyszukiwarek spadł o 7 procent, podobnie jak inne źródła (Search Engine Roundtable, 14 października 2026).
Według Hueslera przyczyną był sposób otwierania linków w ChatGPT po premierze modelu GPT-6. 15 października Huesler poinformował, że był to błąd i że ChatGPT znów dopisuje do linków utm_source=chatgpt.com. OpenAI nie opublikowało w tej sprawie komunikatu. Poniższy mechanizm warto znać, bo pokazuje, co dzieje się z atrybucją za każdym razem, gdy z kliknięcia znika parametr kampanii i nagłówek odsyłacza.
OpenAI w FAQ dla wydawców podaje, że ChatGPT automatycznie dodaje parametr utm_source=chatgpt.com do adresów odsyłających, żeby wydawcy mogli śledzić ruch w narzędziach takich jak Google Analytics (OpenAI, Publishers and developers FAQ). Link z odpowiedzi wygląda wtedy tak:
https://twojadomena.pl/produkt-x/?utm_source=chatgpt.comObecność tego parametru pozwalała każdemu podstawowemu skryptowi śledzącemu (Google Analytics 4, Adobe Analytics, Matomo, Piwik PRO) natychmiast przypisać sesję do źródła chatgpt.com oraz medium referral lub ai_search. Co więcej, przeglądarka internetowa przesyłała w nagłówku żądania HTTP standardowy nagłówek odsyłacza:
Referer: https://chatgpt.com/Huesler opisał, że w okresie błędu GPT-6 otwierał cytowane źródła przez JavaScript, bez parametru w adresie:
window.open(targetUrl, "_blank", "noopener,noreferrer");Konsekwencje tej jednej linijki kodu są dalekosiężne dla całej branży marketingu cyfrowego i analityki:
- Całkowite odcięcie nagłówka Referer: Według dokumentacji MDN funkcja
noreferrerwwindow.openpomija nagłówekRefereri jednocześnie włączanoopener(MDN, Window.open()). Instruuje więc silnik przeglądarki (Blink w Chrome, WebKit w Safari, Gecko w Firefox), aby w wysyłanym żądaniu HTTP do serwera docelowego bezwzględnie usunął nagłówekReferer. Wartośćdocument.referrerw obiekcie DOM strony docelowej wynosi pusty ciąg znaków (""). - Usunięcie parametrów UTM: Z adresów URL wycięto ciąg
?utm_source=chatgpt.com. Użytkownik trafia na czysty adres kanoniczny. - Wymuszenie klasyfikacji Direct w algorytmach analitycznych: W domyślnej grupie kanałów GA4 kanał Direct to źródło dokładnie równe
(direct)i medium(not set)lub(none)(Google Analytics Help, domyślne grupy kanałów). Jeżeli sesja nie posiada parametrów kampanii (utm_source,utm_medium,gclid), a nagłówekRefererjest pusty, system nie ma żadnych podstaw do przypisania źródła i wrzuca wizytę do koszykaDirect / (none).
W ten sposób tysiące wizyt generowanych przez sztuczną inteligencję stały się ruchem widmowym (Dark AI Traffic). Poniższy schemat ilustruje różnicę między poprzednim a nowym mechanizmem przekazywania użytkownika:
+-----------------------------------------------------------------------------------+
| Mechanizm z parametrem UTM: |
| ChatGPT Link -> URL + ?utm_source=chatgpt.com -> Referer: https://chatgpt.com/ |
| -> GA4 kategoryzuje sesję jako: Source: chatgpt.com / Medium: referral |
+-----------------------------------------------------------------------------------+
|
v
+-----------------------------------------------------------------------------------+
| Okres błędu GPT-6, 9-15 października 2026 r.: |
| ChatGPT Link -> window.open(url, "_blank", "noreferrer") -> Czysty URL |
| -> Referer: [BRAK] |
| -> GA4 kategoryzuje sesję jako: Source: (direct) / Medium: (none) |
+-----------------------------------------------------------------------------------+Dla dyrektorów e-commerce i inżynierów WordPress sytuacja ta rodzi poważne ryzyko biznesowe. Zarządy i działy marketingu mogą dojść do błędnego wniosku, że inwestycje w widoczność w silnikach generatywnych (GEO (Generative Engine Optimization)) przestały przynosić rezultaty, podczas gdy w rzeczywistości ruch ten nadal płynie i konwertuje, lecz pozostaje niewidoczny w podstawowych raportach.
jak odroznic ukryty ruch chatgpt od prawdziwego direct
Prawdziwy ruch Direct to użytkownicy, którzy wpisują adres domeny z pamięci w pasek adresu przeglądarki, korzystają z zapisanych zakładek lub klikają w linki w aplikacjach natywnych nieprzekazujących referrera (np. niektóre komunikatory i programy pocztowe).
Prawdziwy ruch bezpośredni ma bardzo charakterystyczny profil:
- Często trafia na stronę główną serwisu (
/lub/pl/). - Składa się w znacznej mierze z powracających użytkowników z aktywnym plikiem cookie sesji.
- Charakteryzuje się niskim wskaźnikiem wyświetlania banera zgód na cookies, ponieważ stały użytkownik dokonał wyboru podczas wcześniejszych odwiedzin.
Ruch z ChatGPT zamaskowany jako Direct ma zupełnie inne, specyficzne sygnatury behawioralne i techniczne:
1. Lądowanie na głębokich adresach URL artykułów i produktów
ChatGPT rzadko rekomenduje stronę główną. Asystent odpowiada na precyzyjne pytania użytkowników (np. jaki filtr do wody w ekspresie ciśnieniowym wybrać albo jak skonfigurować webhooki w WooCommerce). Odnośniki prowadzą zatem wprost do:
- Kart konkretnych produktów w WooCommerce (
/produkt/filtr-wody-model-x/). - Specjalistycznych artykułów na blogu i poradników technicznych.
- Podstron specyfikacji i kalkulatorów.
Jeżeli w panelu GA4 widzisz, że na niszowym artykule blogowym ruch Direct wzrósł z dnia na dzień bez żadnej kampanii newsletterowej, sprawdź logi serwera pod kątem robotów OpenAI na tym adresie.
2. Anomalia wyświetleń banera zgód cookie (CMP)
W analizie Cedrica Hueslera z Adobe baner zgód na urządzeniach mobilnych widziało 55 procent użytkowników wchodzących z ChatGPT. W okresie błędu odsetek nowych użytkowników Direct na mobile, którzy zobaczyli baner, wzrósł z 36 do 44 procent (Search Engine Roundtable). Rosnący udział pierwszych wyświetleń banera w kanale Direct przeczy tezie o stałych czytelnikach wpisujących URL z pamięci.
3. Ekstremalnie skrócony lejek zakupowy
Wizyty z AI cechuje wysoki wskaźnik zaangażowania w konkretny cel. Użytkownik nie błądzi po menu i nie przegląda stron kategorii. Informacje o cenie, parametrach i wadach produktu otrzymał już w oknie konwersacji z LLM. Na stronę wchodzi z gotową intencją: weryfikacja dostępności, dodanie do koszyka i finalizacja zakupu.
korelacja logow serwera między oai searchbot a wejsciami uzytkownikow
Sztuczna inteligencja nie generuje linków z powietrza. Aby ChatGPT mógł zacytować Twoją podstronę w odpowiedzi na bieżące zapytanie użytkownika, serwery OpenAI muszą pobrać treść dokumentu. Odpowiadają za to dwa roboty sieciowe:
OAI-SearchBot: robot, który według OpenAI służy do pokazywania stron w wynikach wyszukiwania ChatGPT. Strony zablokowane dla niego wrobots.txtnie pojawiają się w odpowiedziach wyszukiwania, choć mogą nadal występować jako linki nawigacyjne.ChatGPT-User: agent wykonujący określone działania zainicjowane przez użytkownika w ChatGPT i Custom GPTs. OpenAI zaznacza, że nie służy do automatycznego crawlowania sieci i że regułyrobots.txtmogą go nie obejmować, bo działanie inicjuje użytkownik (OpenAI, Overview of OpenAI Crawlers).
Wykrywanie ruchu z ChatGPT polega na analizie korelacji czasowej w logach serwera WWW (Nginx, Apache, Caddy, Cloudflare). Typowa sekwencja zdarzeń wygląda następująco:
[14/Oct/2026:14:22:01 +0200] GET /pl/blog/analiza-danych/ HTTP/2.0 200
User-Agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; OAI-SearchBot/1.4; +https://openai.com/searchbot
IP: 20.171.206.x (openai.com/searchbot.json)
... (odstęp 12 sekund) ...
[14/Oct/2026:14:22:13 +0200] GET /pl/blog/analiza-danych/ HTTP/2.0 200
Referer: -
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 18_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.1 Mobile/15E148 Safari/604.1
IP: 89.64.x.x (Operator telekomunikacyjny użytkownika)Jeżeli w logach serwera odnotowano żądanie od OAI-SearchBot lub ChatGPT-User, a w ciągu kolejnych 10-180 sekund ten sam zasób został pobrany przez przeglądarkę mobilną lub desktopową z pustym nagłówkiem Referer, wizyta jest kandydatem do przypisania ChatGPT. Korelacja czasowa nie dowodzi źródła, a okno 180 sekund to założenie, które warto skalibrować na własnych logach.
Poniższy skrypt w Node.js parsuje logi serwerowe w formacie Combined Log Format i wykrywa takie zdarzenia, generując raport korelacji:
import fs from "node:fs";
import readline from "node:readline";
// Wzorce robotów OpenAI
const AI_BOT_REGEX = /OAI-SearchBot|ChatGPT-User/i;
// Maksymalne okno czasowe korelacji (w sekundach)
const CORRELATION_WINDOW_SEC = 180;
async function analyzeAccessLogs(logFilePath) {
const fileStream = fs.createReadStream(logFilePath);
const rl = readline.createInterface({ input: fileStream, crlfDelay: Infinity });
const botEvents = new Map(); // url -> timestamp[]
const correlatedVisits = [];
const logRegex = /^(\S+) \S+ \S+ \[([^\]]+)\] "(\S+) (\S+) \S+" (\d{3}) \S+ "([^"]*)" "([^"]*)"/;
for await (const line of rl) {
const match = line.match(logRegex);
if (!match) continue;
const [_, ip, dateStr, method, url, status, referer, userAgent] = match;
const timestamp = Math.floor(new Date(dateStr.replace(":", " ")).getTime() / 1000);
if (method !== "GET" || status !== "200") continue;
// Rejestracja aktywności bota AI
if (AI_BOT_REGEX.test(userAgent)) {
if (!botEvents.has(url)) botEvents.set(url, []);
botEvents.get(url).push(timestamp);
continue;
}
// Sprawdzenie czy to potencjalny ruch Direct z AI
const isDirect = referer === "-" || referer === "";
const isHumanUser = !userAgent.includes("bot") && !userAgent.includes("spider");
if (isDirect && isHumanUser && botEvents.has(url)) {
const timestamps = botEvents.get(url);
const recentBotHit = timestamps.find(t => timestamp >= t && (timestamp - t) <= CORRELATION_WINDOW_SEC);
if (recentBotHit) {
correlatedVisits.push({
url,
userTimestamp: timestamp,
botTimestamp: recentBotHit,
delaySeconds: timestamp - recentBotHit,
userIp: ip,
userAgent: userAgent.slice(0, 80)
});
}
}
}
console.log(`Zidentyfikowano ${correlatedVisits.length} wizyt skorelowanych z ChatGPT AI Search.`);
return correlatedVisits;
}
// Uruchomienie: node scripts/analyze-ai-traffic.mjs /var/log/nginx/access.logjak wdrozyc serwerowe wykrywanie ruchu ai w wordpress i cloudflare
Aby odzyskać kontrolę nad danymi i przestać zgadywać, ile przychodów generuje sztuczna inteligencja, należy przenieść detekcję na poziom infrastruktury: do Cloudflare Worker lub wtyczki typu Must-Use (MU-plugin) w WordPressie.
Krok 1: Wdrożenie Cloudflare Worker dla heurystyki ruchu AI
Jeżeli Twój sklep działa za proxy Cloudflare, Worker może analizować każde przychodzące żądanie. Jeśli wykryje, że wizyta jest bezpośrednia na głęboki adres URL, a w pamięci podręcznej KV odnotowano niedawną aktywność bota AI na tej podstronie, Worker może dopisać do żądania wewnętrzny nagłówek lub ciasteczko śledzące:
export default {
async fetch(request, env) {
const url = new URL(request.url);
const referer = request.headers.get("referer");
const userAgent = request.headers.get("user-agent") || "";
// 1. Oznaczanie zapytań botów OpenAI
if (/OAI-SearchBot|ChatGPT-User/i.test(userAgent)) {
// Zapisz znacznik czasu w Cloudflare KV z czasem życia 5 minut
await env.AI_CACHE.put(`bot:${url.pathname}`, Date.now().toString(), { expirationTtl: 300 }).catch(() => {});
return fetch(request);
}
// 2. Analiza ruchu ludzkiego bez referrera
const isDirect = !referer || referer === "";
const isDeepPage = url.pathname !== "/" && !url.pathname.startsWith("/wp-admin");
if (isDirect && isDeepPage) {
const lastBotHit = await env.AI_CACHE.get(`bot:${url.pathname}`);
if (lastBotHit) {
const timeDiff = (Date.now() - parseInt(lastBotHit, 10)) / 1000;
// Jeżeli bot był tu w ciągu ostatnich 180 sekund, oznacz sesję
if (timeDiff <= 180) {
const modifiedRequest = new Request(request, {
headers: new Headers(request.headers)
});
modifiedRequest.headers.set("X-Probable-AI-Source", "chatgpt");
const response = await fetch(modifiedRequest);
const modifiedResponse = new Response(response.body, response);
// Ustaw krótkotrwałe ciasteczko dla warstwy frontendowej/GTM
modifiedResponse.headers.append(
"Set-Cookie",
`ai_inferred_source=chatgpt; Path=/; Max-Age=1800; SameSite=Lax; Secure`
);
return modifiedResponse;
}
}
}
return fetch(request);
}
};Krok 2: Odbiór sygnału w WordPress i integracja z dataLayer
W WordPressie tworzymy plik w katalogu wp-content/mu-plugins/ai-traffic-detector.php. Skrypt sprawdza nagłówek X-Probable-AI-Source lub obecność ciasteczka i wstrzykuje odpowiednie zmienne do warstwy danych dataLayer:
<?php
/**
* Plugin Name: AI Search Traffic Heuristic Detector
* Description: Wykrywa ukryty ruch z silników AI po usunięciu parametrów UTM i przekazuje dane do dataLayer.
* Author: WPPoland
* Version: 1.0.0
*/
if (!defined('ABSPATH')) {
exit;
}
add_action('wp_head', function () {
$is_ai_traffic = false;
$ai_source = 'none';
// 1. Sprawdzenie nagłówka z Cloudflare / Nginx
if (isset($_SERVER['HTTP_X_PROBABLE_AI_SOURCE'])) {
$is_ai_traffic = true;
$ai_source = sanitize_text_field($_SERVER['HTTP_X_PROBABLE_AI_SOURCE']);
}
// 2. Sprawdzenie ciasteczka sesyjnego
elseif (isset($_COOKIE['ai_inferred_source'])) {
$is_ai_traffic = true;
$ai_source = sanitize_text_field($_COOKIE['ai_inferred_source']);
}
// 3. Sprawdzenie rzadkich przypadków zachowanego referrera (aplikacje Android/iOS)
elseif (isset($_SERVER['HTTP_REFERER'])) {
$ref = $_SERVER['HTTP_REFERER'];
if (strpos($ref, 'chatgpt.com') !== false || strpos($ref, 'com.openai.chatgpt') !== false) {
$is_ai_traffic = true;
$ai_source = 'chatgpt_direct_ref';
} elseif (strpos($ref, 'perplexity.ai') !== false) {
$is_ai_traffic = true;
$ai_source = 'perplexity';
} elseif (strpos($ref, 'claude.ai') !== false) {
$is_ai_traffic = true;
$ai_source = 'claude';
}
}
if ($is_ai_traffic) {
?>
<script>
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': 'ai_traffic_detected',
'ai_traffic_source': '<?php echo esc_js($ai_source); ?>',
'ai_traffic_inferred': true
});
</script>
<?php
}
}, 1);Dzięki temu tag Google Analytics 4 w Google Tag Managerze może odczytać zdarzenie ai_traffic_detected i nadpisać wymiary sesji, wysyłając do GA4 parametr:
traffic_type: "ai_search"inferred_source: "chatgpt"
jakie ograniczenia ma wykrywanie ruchu ai w cloudflare workers kv
Worker z kroku 1 zapisuje znaczniki w Workers KV. Dokumentacja Cloudflare podaje trzy ograniczenia, które wpływają na wynik tej heurystyki (Cloudflare, Write key-value pairs):
- Minimalna wartość
expirationTtlto 60 sekund. Czas życia 300 sekund z przykładu jest poprawny, a krótsze okno sprawdza warunektimeDiff <= 180w kodzie. - Do tego samego klucza można zapisać najwyżej jedną wartość na sekundę, a częstsze zapisy kończą się błędem 429. Kilka zapytań bota w tej samej sekundzie na ten sam adres przerwałoby obsługę żądania, dlatego zapis w przykładzie kończy się
.catch(() => {}). - Zapis jest od razu widoczny w tej samej lokalizacji sieci, ale w innych częściach świata może pojawić się dopiero po 60 sekundach. Robot OpenAI i użytkownik zwykle łączą się z różnymi centrami danych Cloudflare, więc część wizyt w pierwszej minucie po pobraniu strony przez robota nie zostanie oznaczona.
Nagłówek User-Agent łatwo podrobić. OpenAI publikuje zakresy adresów IP swoich robotów w plikach https://openai.com/searchbot.json i https://openai.com/chatgpt-user.json (OpenAI, Overview of OpenAI Crawlers). Zapisuj znacznik robota w KV tylko wtedy, gdy adres z nagłówka CF-Connecting-IP mieści się w tych zakresach. Bez tej kontroli każdy skrypt z nagłówkiem OAI-SearchBot może oznaczyć dowolną podstronę jako odwiedzoną przez ChatGPT i zawyżyć raport.
jak ga4 klasyfikuje ruch z chatgpt w kanale ai assistant
Domyślna grupa kanałów GA4 ma osobny kanał AI Assistant. Google opisuje go jako kanał, którym użytkownicy trafiają na stronę ze źródeł takich jak ChatGPT, Gemini, Deepseek, Copilot czy Grok, z wyłączeniem AI Overviews i AI Mode w wyszukiwarce Google (Google Analytics Help, domyślne grupy kanałów). Reguła ma dwa warianty: medium dokładnie równe ai-assistant albo odsyłacz pasujący do listy asystentów AI, po którym GA4 ustawia medium ai-assistant i kampanię (ai-assistant).
Z tej definicji wynikają trzy praktyczne wnioski:
- Kanał AI Assistant opiera się na odsyłaczu albo na medium. Wizyta bez nagłówka
Refereri bez parametrów kampanii spełnia regułę Direct, więc żaden kanał domyślny jej nie odzyska. Tak właśnie wyglądały kliknięcia z ChatGPT w okresie błędu. - Google w dokumentacji parametrów kampanii zaleca, żeby zawsze używać
utm_source,utm_mediumiutm_campaign, a brakujące parametry raportuje jako(not set)(Google Analytics Help, adresy URL z parametrami kampanii). Linki, które publikujesz sam, na przykład w opisie własnego GPT, oznaczaj pełnym zestawem zutm_medium=ai-assistant, bo dokładnie to medium dopasowuje reguła kanału. - Przed budową własnej grupy kanałów sprawdź, ile ruchu GA4 już przypisuje do AI Assistant. Własna grupa ma sens, gdy chcesz rozdzielić poszczególnych asystentów albo dołączyć źródła spoza listy Google.
jak skonfigurowac custom channel grouping w google analytics 4
Aby przywrócić porządek w raportach zarządczych, w Google Analytics 4 należy skonfigurować własną grupę kanałów (Custom Channel Grouping). Nowa grupa pozwoli wyodrębnić ruch z asystentów sztucznej inteligencji z worka Direct oraz tradycyjnego Referral.
Procedura konfiguracji w GA4:
- Zaloguj się do Google Analytics 4 i przejdź do sekcji: Administracja -> Wyświetlanie danych -> Grupy kanałów.
- Kliknij Utwórz nową grupę kanałów (np. Kanały z uwzględnieniem AI).
- Dodaj nowy kanał o nazwie AI Search & Chatbots.
- Zdefiniuj reguły dopasowania kanału według następującej hierarchii:
Warunek 1 (Znane źródła tekstowe):
Źródło pasuje do wyrażenia regularnego (regex):
.*(chatgpt|openai|perplexity|claude|copilot|gemini|anthropic|mistral|deepseek).*
LUB
Warunek 2 (Aplikacje mobilne AI):
Źródło pasuje do wyrażenia regularnego:
.*(android-app:\/\/com\.openai\.chatgpt|android-app:\/\/ai\.perplexity|ios-app).*- Umieść kanał AI Search & Chatbots powyżej standardowych kanałów Organic Search, Referral oraz Direct.
- Zapisz regułę.
Standardowa usługa GA4 pozwala utworzyć 2 własne grupy kanałów (usługa 360: 5), a każda grupa mieści do 50 kanałów. Grupę można stosować wstecz w raportach, segmentach i eksploracjach, a ruch trafia do pierwszego kanału, którego definicję spełnia, według bieżącej kolejności (Google Analytics Help, niestandardowe grupy kanałów). Dlatego kolejność z punktu 5 ma znaczenie. Google wymienia jako pola tych reguł wymiary źródła ruchu: źródło, medium, nazwę i identyfikator kampanii, platformę źródłową, ręczną treść reklamy i domyślną grupę kanałów. Parametru zdarzenia ze skryptu detekcji wśród nich nie ma, więc sygnał ai_traffic_inferred analizuj jako niestandardowy wymiar w eksploracjach i segmentach.
Od tego momentu każdy użytkownik wchodzący z aplikacji mobilnej ChatGPT i z przeglądarek, które nie wycięły referrera, będzie raportowany w dedykowanej kolumnie. W raportach E-commerce: zakupy zobaczysz precyzyjną liczbę transakcji i przychód wygenerowany przez ruch AI.
jak mierzyc konwersje z wyszukiwarek ai w sklepie woocommerce
Utrata tradycyjnych tagów UTM zmusza administratorów sklepów WooCommerce do wdrożenia wielopoziomowej strategii pomiaru konwersji opartej na danych pierwszej strony (First-Party Data). Trzy techniki dają najwyższą precyzję atrybucji:
1. Dedykowane kody rabatowe w danych semantycznych
Jeżeli prowadzisz działania optymalizacyjne GEO/AEO, Twoje podstrony produktowe zawierają uporządkowane dane strukturalne JSON-LD (Product, Offer) oraz karty wiedzy (llmCard).
Możesz udostępnić w tych strukturach unikalny kod rabatowy przeznaczony wyłącznie dla modeli językowych:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Specjalistyczny filtr do ekspresu ciśnieniowego",
"offers": {
"@type": "Offer",
"price": "149.00",
"priceCurrency": "PLN",
"description": "Kup z kodem promocyjnym CHAT5 dla czytelników asystentów AI i uzyskaj 5% rabatu przy zamówieniu online."
}
}Jeżeli model przytoczy kod w odpowiedzi, każde użycie tego kuponu w kasie WooCommerce jest twardym dowodem konwersji z asystenta AI. Nie ma gwarancji, że model kod przytoczy, a raz opublikowany kupon może krążyć dalej, więc traktuj go jako dolną granicę, a nie pełny obraz.
2. Ankieta post-purchase na stronie zamówienia otrzymanego
Wdrożenie lekkiego pytania na ekranie podziękowania za zakup (order-received) pozwala zidentyfikować klientów, którzy przyszli z ChatGPT, a których analityka zaklasyfikowała jako Direct.
Dodaj poniższy fragment kodu do szablonu motywu potomnego lub wtyczki funkcjonalnej:
add_action('woocommerce_thankyou', function ($order_id) {
if (!$order_id) return;
$order = wc_get_order($order_id);
if ($order->get_meta('_attribution_survey_answered')) return;
?>
<div class="ai-survey-box" style="margin: 24px 0; padding: 20px; border: 1px solid #e2e8f0; border-radius: 8px; background: #f8fafc;">
<h3 style="margin-top: 0; font-size: 18px;">Jedno szybkie pytanie: jak trafiłeś do naszego sklepu?</h3>
<form id="ai-attribution-form">
<input type="hidden" name="order_id" value="<?php echo esc_attr($order_id); ?>">
<label style="display: block; margin-bottom: 8px; cursor: pointer;">
<input type="radio" name="source_channel" value="chatgpt_ai"> Polecenie w ChatGPT / Asystencie AI
</label>
<label style="display: block; margin-bottom: 8px; cursor: pointer;">
<input type="radio" name="source_channel" value="google_search"> Tradycyjna wyszukiwarka Google
</label>
<label style="display: block; margin-bottom: 8px; cursor: pointer;">
<input type="radio" name="source_channel" value="social_media"> Media społecznościowe / Reklama
</label>
<label style="display: block; margin-bottom: 12px; cursor: pointer;">
<input type="radio" name="source_channel" value="friend_recommendation"> Z polecenia znajomego
</label>
<button type="submit" class="button" style="padding: 8px 16px;">Zapisz odpowiedź</button>
</form>
</div>
<script>
document.getElementById('ai-attribution-form').addEventListener('submit', function(e) {
e.preventDefault();
const formData = new FormData(this);
fetch('/wp-json/wppoland/v1/save-attribution', {
method: 'POST',
body: formData
}).then(() => {
document.querySelector('.ai-survey-box').innerHTML = '<p style="color: #16a34a; font-weight: bold; margin: 0;">Dziękujemy za odpowiedź!</p>';
});
});
</script>
<?php
});Fragment wysyła odpowiedź pod adres /wp-json/wppoland/v1/save-attribution, więc ten punkt końcowy trzeba zarejestrować przez register_rest_route() z własnym permission_callback, który sprawdza, czy zamówienie należy do bieżącego klienta. Odpowiedzi porównuj z pochodzeniem zamówienia zapisanym przez WooCommerce, opisanym w następnej sekcji.
3. Testy przyrostowości (Incrementality Testing)
W zaawansowanych ekosystemach e-commerce stosuje się modelowanie przyrostowe. Polega ono na wygaszeniu obecności określonych produktów w pliku llms.txt lub zablokowaniu bota OAI-SearchBot dla wybranej kategorii testowej (np. przez regułę User-agent: OAI-SearchBot Disallow: /kategoria-testowa/).
OpenAI podaje, że po zmianie w robots.txt uwzględnienie jej w wynikach wyszukiwania może zająć około 24 godzin, a zablokowana strona może nadal pojawić się jako sam link z tytułem, jeżeli OpenAI zna jej adres z innych źródeł. Żeby to wykluczyć, potrzebny jest meta tag noindex, a robot musi mieć dostęp do strony, żeby go odczytać (OpenAI, Publishers and developers FAQ). Licz więc okres testu od dnia po zmianie.
Jeżeli w grupie testowej po 3 tygodniach odnotujesz spadek sprzedaży i wejść Direct przy stałym poziomie ruchu z tradycyjnego SEO i Google Ads, różnica ta stanowi rzeczywisty wolumen sprzedaży kreowany przez silnik OpenAI.
jak woocommerce order attribution zapisuje zamówienia z chatgpt
WooCommerce od wersji 8.5.0, wydanej 9 stycznia 2024 roku, ma wbudowaną funkcję Order Attribution, włączoną domyślnie w nowych i istniejących sklepach (WooCommerce Developer Blog, WooCommerce 8.5.0). Przy złożeniu zamówienia funkcja zapisuje adres odsyłający, parametry UTM (source, medium, campaign, content, term), typ urządzenia i liczbę odsłon w sesji przed zamówieniem (dokumentacja WooCommerce, Order Attribution Tracking). Dane widać w polach Order attribution i Customer history na ekranie edycji zamówienia oraz w kolumnie pochodzenia w tabeli WooCommerce > Orders.
Dla ruchu z ChatGPT liczą się reguły pierwszeństwa z dokumentacji:
- źródło UTM i źródło organiczne nadpisują wcześniejsze źródło,
- wejście bezpośrednie (type-in) nigdy nie nadpisuje rozpoznanego źródła,
- odesłanie nadpisuje poprzednie źródło tylko wtedy, gdy nie trwa aktywna sesja,
- zamówienie bez odsyłacza i bez źródła ma pochodzenie Direct.
Zamówienie z linku z utm_source=chatgpt.com trafia więc do raportu ze źródłem UTM chatgpt.com, a zamówienie z kliknięcia bez parametru i bez odsyłacza jako Direct. Druga reguła działa na korzyść sklepu: klient, który wszedł z oznaczonego linku, a potem wrócił, wpisując adres, zachowuje źródło z ChatGPT, dopóki przeglądarka trzyma ciasteczka atrybucji.
Funkcja zapisuje w przeglądarce siedem ciasteczek sbjs_, w tym sbjs_session ważne 30 minut, a dane odczytuje dopiero przy złożeniu zamówienia. Jest zgodna z WP Consent API, więc współpracuje z wtyczkami do zarządzania zgodami. Wyłączysz ją w WooCommerce > Settings > Advanced > Features albo poleceniem WP-CLI:
wp option update woocommerce_feature_order_attribution_enabled "no"Zamówienia złożone przy wyłączonej funkcji nie mają danych atrybucji, więc przed analizą ruchu z AI sprawdź, czy funkcja działała w badanym okresie. Zestawienie zamówień z pochodzeniem Direct z odpowiedziami z ankiety post-purchase pokazuje, ile sprzedaży z asystentów AI zgubiła analityka.
podsumowanie i lista zadan dla zespolu technicznego
Tydzień bez parametru utm_source=chatgpt.com pokazał, jak bardzo raporty ruchu z AI zależą od jednego parametru i jednego nagłówka, które kontroluje dostawca czatu. Błąd naprawiono 15 października, ale ta sama zależność wróci przy każdej kolejnej zmianie w interfejsie ChatGPT.
Aby zapewnić rzetelne dane dla Twojego biznesu:
- Przeanalizuj logi serwera WWW pod kątem obecności
OAI-SearchBotorazChatGPT-Useri porównaj je ze skokami wejśćDirect. - Sprawdź domyślny kanał AI Assistant w Google Analytics 4, a jeśli potrzebujesz większej szczegółowości, utwórz dedykowaną grupę AI Search.
- Wdróż serwerowe mechanizmy heurystyczne w Cloudflare Worker lub wtyczce WordPress.
- Zastosuj kody promocyjne w schematach structured data oraz ankietę post-purchase w WooCommerce i porównuj odpowiedzi z pochodzeniem zamówień w Order Attribution.
- Zabezpiecz wewnętrzne linkowanie i architekturę treści tak, aby boty AI bez przeszkód odnajdywały fakty o Twoich usługach, co opisujemy w sekcji audyt bezpieczeństwa WordPress, integracjach integracje WooCommerce z ERP oraz przewodniku o Google Universal Cart i UCP. W przypadku pytań zachęcamy do kontaktu z zespołem WPPoland.







