Skip to content

How to track ChatGPT traffic in Google Analytics 4, and what the count leaves out

Since May 13, 2026, Google Analytics 4 has put visits from the AI assistants it recognizes in a channel of their own, AI Assistant. It counts only visits that arrive with a referrer, so the figure is a floor. Citations and fetches are counted elsewhere, and neither is a visit.

By
WP Ministry
Published
Tested on
WordPress 7.1.3, PHP 8.3.35

In short

  • Google Analytics 4 has had an AI Assistant channel since May 13, 2026. A visit lands there when its referrer is on Google's list of AI assistants.
  • A click from a Google AI Overview or AI Mode is not in that channel. Google counts it as Organic Search, with every other click from Google.
  • A visit that arrives with no referrer is counted as Direct. No report says how many of those began in an assistant, so the count is a floor.
  • OpenAI's help article that said ChatGPT adds utm_source=chatgpt.com to its links was gone from its address on October 10, 2026. Read the source column, not only the channel.
  • Search Console counts impressions in Google's AI answers and Bing counts citations. Neither is a count of visits, and neither can be turned into one.
  • The server's access log counts fetches by ChatGPT-User, Claude-User and Perplexity-User. A fetch is a request made by software, not a person.

In Google Analytics 4, open Reports, then Acquisition, then Traffic acquisition, and look for the row named AI Assistant. Google added that channel on May 13, 2026. A visit lands in it when it arrives with a referrer on Google's list of AI assistants, such as ChatGPT, Gemini, Copilot or Claude.

That row is a floor. A visit that arrives with no referrer is counted as Direct, a click from a Google AI Overview or AI Mode is counted as Organic Search, and nothing in the report sets either apart. A ChatGPT visit can also sit outside the channel under its own source, for a reason given below.

Two other counts get called AI traffic, and neither is a visit: how often an AI answer showed or cited one of your pages, and how often an assistant's software fetched one. Each has its own report. This page takes the three in turn.

Every statement about a product is from its maker's own page as it read on October 10, 2026. These programs change by the month, and one of them changed between October 4 and October 10.

Three counts, and what one of each is

CountWhere it is keptOne of them isIt is not
VisitsGoogle Analytics 4, and the server's access logA browser loading your page after a click in an assistant's answerEveryone who came that way. Only those who could be recognized
Impressions and citationsSearch Console and Bing Webmaster ToolsA link to your page shown in an AI answer, or your page named as its sourceA visit. Nobody may have clicked
FetchesThe server's access logAn assistant's software asking your server for a pageA person

Keep the three apart. They are counted by different companies in different ways, so they cannot be added together, and one cannot be divided by another to get a rate.

Visits in Google Analytics 4

The AI Assistant channel

Google's release note of May 13, 2026 lists three changes. A visit whose referrer matches a recognized AI assistant gets the medium ai-assistant. It is filed under a channel named AI Assistant. Its campaign is named (ai-assistant).

The help page for the default channel group gives the rule in the same terms: the channel is every visit whose medium is exactly ai-assistant, and that medium is set when the referrer matches a list of AI assistants. The same page says what is in and what is out.

  • In. The page's examples are ChatGPT, Gemini, Deepseek, Copilot and Grok. The release note names Claude as well.
  • Out. Google's own AI Overviews and AI Mode. The page says the AI Assistant channel excludes them and that Organic Search includes them. To Analytics, a click on a link in an AI Overview is a click from Google Search.
  • Not published. The list itself. The help page links to a file of the sources behind its channels. On October 10, 2026 that file had four categories, for search, shopping, social and video sites, and none for AI assistants. Whether an assistant not named above is recognized is something your own report shows.

Neither page says whether the channel is applied to visits from before May 13, 2026.

Where to look

  1. Step 1: Open the report

    Sign in to Google Analytics. From the left menu select Reports, then Acquisition, then Traffic acquisition. Google's help page says that if the report is not there, it may have been removed from the menu, and that an Editor of the property can add it back.

  2. Step 2: Find the AI Assistant row

    The table opens grouped by channel. Google's help page for the report calls this dimension "Session default channel grouping" and says it is the report's default. Set the dates to start after May 13, 2026 and look for the row AI Assistant. If there is no such row, no visit in those dates was recognized.

  3. Step 3: See which assistant

    Choose "Session source / medium" from the table's dimension drop-down, then type ai-assistant in the search bar above the table. Each row that remains is one source with that medium.

  4. Step 4: See which pages

    Click "+ Add filter" at the top of the report. In the "Build filter" panel leave Include selected, choose "Session medium" under Dimension and ai-assistant under Dimension values, then click OK and Apply. Then click the button beside the dimension drop-down that adds a secondary dimension, and select "Page path and screen class". The table now lists the pages seen in those visits.

The report's Key events column counts what those visits did, once you have marked an event such as a form submission as a key event. A count of visits says little without it.

Read the source, not only the channel

Until this month OpenAI documented a second mark on a visit from ChatGPT. An article in its Help Center, "Publishers and Developers - FAQ", said that ChatGPT automatically adds the parameter utm_source=chatgpt.com to the addresses it sends people to, so that a publisher could follow those visits in a product such as Google Analytics. The Internet Archive kept a copy of the article on October 4, 2026.

On October 10, 2026 the article's address opened a different article, about the retirement of OpenAI's Atlas browser. A search of the Help Center for the parameter's name listed articles about advertising, promotions and signing in, and none for publishers. OpenAI's page on its crawlers and its article on searching the web with ChatGPT do not mention the parameter. So it was documented, and as of that day it was not. Whether ChatGPT still adds it is for your own report to show.

It matters because of what Analytics does with a tagged address. Google's page on manual tagging says that when any UTM parameter is on an address, Analytics takes every traffic-source value from the parameters alone, and that a parameter left out shows as "(not set)". An address that carries utm_source=chatgpt.com and nothing more has a source and no medium. The AI Assistant channel asks for a medium of ai-assistant, which is set from the referrer.

Google's pages do not say which rule applies to a visit that has both a recognized referrer and the parameter, or what becomes of one with the parameter and no referrer. By the rules as they are written, the second matches no channel, and Analytics shows a visit that matches no channel as Unassigned. That is a reading of the rules and not a statement of Google's.

So count by source as well. With "Session source / medium" as the dimension, search for chatgpt. A row whose source is chatgpt.com is a visit from ChatGPT whatever medium stands beside it and whichever channel it was filed under. Do the same for perplexity, copilot, gemini and claude.

The parameter does not make a second page

The same parameter shows in the page addresses Analytics records, and in the server's log. On WordPress it does not create another page. The tagged address is answered with the page itself, and the page names the address without the parameter as its canonical one. This command prints that tag for an address of your own.

bash
curl -s "https://example.com/sample-page/?utm_source=chatgpt.com" | grep -io '<link rel="canonical"[^>]*>'

On a new WordPress with "Post name" permalinks and no SEO plugin, it printed one line, with the test site's own address where example.com is here.

text
<link rel="canonical" href="https://example.com/sample-page/" />

WordPress prints that tag on a single post or page, and not on the home page when it lists the latest posts. With an SEO plugin active the tag is the plugin's, so run the command on your own site instead of assuming.

Visits from before May 13, 2026, and assistants Google does not list

A custom channel group covers both. Google's help page says a custom channel group can be applied to reports retroactively, and it gives an example made for AI assistants. Its rule reads the source and not the medium, so it also takes in a visit whose source is chatgpt.com and whose medium is "(not set)". A standard property may have two custom groups besides the default one, with up to 50 channels in each.

  1. Step 1: Open Channel groups

    In Admin, under "Data display", click "Channel groups". Google's page says you must be an Editor or above on the property.

  2. Step 2: Start a group

    Click "Create new channel group". It starts as a copy of the default group. Give it a name.

  3. Step 3: Add the channel

    Click "Add new channel" and name it, for example "AI assistants". Click "+ Add condition group", choose Source as the dimension, choose "matches regex" and enter the expression below. Click "Save channel". Google's example does not name the dimension. Source is the one that holds the name of the site a visit came from.

  4. Step 4: Put it above Referral

    Click Reorder, drag the new channel above Referral, and click Apply. Google's page says a visit goes into the first channel whose definition it matches, in the order of the list.

  5. Step 5: Save and use it

    Click "Save group". In the Traffic acquisition report, choose the new group as the table's dimension.

This is the expression in Google's example, exactly as its help page gives it.

text
^.*ai|.*\.openai.*|.*chatgpt.*|.*gemini.*|.*gpt.*|.*copilot.*|.*perplexity.*|.*google.*bard.*|.*bard.*google.*|.*bard.*|.*.*gemini.*google.*$

It is wide. Google's page on regular expressions says an expression in Analytics has to match the whole value unless it is written to match part of one. Read that way, the first part takes any source whose name ends in the letters "ai", and the parts for "gpt" and "bard" take any source with those letters anywhere in it. Look at what the new channel catches on your own list of sources, and narrow the expression if it catches something that is no assistant. Google's page adds that the expression needs updating as assistants and their addresses change.

What Analytics cannot see

  • A click that sends no referrer. Google's page on "(direct) / (none)" says that label is for traffic with no clear referral source. The HTTP standard says a browser leaves the referrer out when the address did not come from a page with an address of its own, and gives a typed address and a bookmark as examples. A link opened from an app that is not a browser is read here as the same case. A site can also tell browsers to send no referrer for the links on its pages, with a Referrer-Policy of no-referrer. None of the pages of OpenAI, Anthropic, Perplexity, Microsoft or Google read for this guide says what its assistant sends.
  • An address copied out of an answer, or typed later. Google's page counts a typed address as Direct.
  • A visitor who is not measured. A site that loads Analytics only after a visitor agrees records nothing for one who declines. With Google's consent mode, a visitor who declines gets no cookies, and Google says it fills the gaps with modeling. Google's page on Direct adds that an ad blocker can leave a visit classified as Direct.
  • Google's own AI answers. They are inside Organic Search, as above.
  • An answer that was enough. Someone who read your page's content in an answer and never clicked made no visit. That is what the next section counts.

The AI Assistant figure is therefore a floor: the real number is that or more, and no report says how much more. If Direct rises in the same weeks, part of the rise may be assistants. Nothing in Analytics can show that it is.

Impressions and citations, which are not visits

Search Console

The generative AI performance report counts impressions, which its help page defines as how many times links to your site were shown to a user in a generative AI feature on Google Search. It covers AI Overviews and AI Mode, and groups the count by page, country, date and device. The help page says the report reached all websites as of August 31, 2026, and that a site with too few impressions in those features does not see it.

It has no clicks and no queries. Clicks are in the Performance report, where Google's help page says a click on a link in an AI Overview or in AI Mode counts as a click, with every other click from Search. Did AI Overviews cause your traffic drop? covers what that report can and cannot separate, and how to appear in Google AI Overviews covers what keeps a page out.

Read Google's page of data anomalies before you compare two periods. It records known faults in Search Console's data for the last 3 to 16 months. On October 10, 2026, these entries touched the figures above.

DatesWhat Google says happenedWhat it means for a comparison
August 13 to 17, 2026A logging error lowered impressions in the generative AI report for Search. An update of August 21 says the missing data was restoredA figure for those days written down before August 21 is low. Read it again
June 24 and August 13, 2026A logging error lowered impressions for generative AI features in Discover, for sites that have that reportThe page records no restoration. Those two days read low
May 13, 2025 to April 27, 2026Impressions in the Performance report were not reported accurately. Clicks were not affectedAcross April 27, 2026, compare clicks and not impressions

The lesson is wider than three rows. A change in impressions from one week to the next can be Google's logging and not your site. Write the day you read a figure beside the figure, and check that page for the dates on both sides of a comparison.

Bing Webmaster Tools

Bing has two reports, and they count different things.

AI Performance counts citations. Microsoft opened it as a public preview on February 10, 2026 and added four preview views on June 16, 2026. Its help page says it covers Microsoft Copilot, AI summaries in Bing and partner integrations it does not name. On whether a citation is a click or traffic, the page answers no: a citation "does not represent traffic, clicks, or user engagement." It also says the data is a sample and not a complete log.

Search Performance counts clicks, with chat inside them. Its help page lists a source named "Web and Chat", which holds clicks and impressions from web search results and from the "Learn more" links in chat responses, as one figure. The lists of keywords and pages are for web traffic only. So Bing does count clicks from chat answers, and does not show them apart from clicks on ordinary results.

Bing Webmaster Tools for WordPress covers the setup and what each figure in the citations report means.

Fetches in the server's access log

When someone asks an assistant about a page, the assistant's software may request that page from your server. The request is written to the access log like any other, under a name the company publishes. These are the fetchers that act on a person's request, as each company's page describes them.

CompanyName in the logWhat the company says
OpenAIChatGPT-UserWhen a user asks ChatGPT or a custom GPT a question, it may visit a web page with this agent. Not used for automatic crawling
AnthropicClaude-UserWhen a person asks Claude a question, it may access websites with this agent
PerplexityPerplexity-UserWhen a user asks a question, it might visit a page to help answer and link to it
GoogleGoogle-AgentUsed by agents on Google's infrastructure to navigate the web and act on a user's request
MicrosoftNone of its ownBing's page on its crawlers lists Bingbot, a crawler for ads and three that make previews. It lists no separate fetcher for Copilot

The crawlers that build a search index or collect pages for training, such as OAI-SearchBot and GPTBot, are a different matter. Blocking or allowing AI crawlers on WordPress lists them all and has a command that shows which status each one was given.

Count fetches by page

Replace /path/to/access.log with the log's path. The server's configuration sets it, so ask the host if the hosting panel does not offer the log.

bash
for bot in ChatGPT-User Claude-User Perplexity-User; do
  grep "$bot" /path/to/access.log | awk -v bot="$bot" '$9 == 200 { print bot, $7 }'
done | sort | uniq -c | sort -rn

Each line of the result is a count, a fetcher and an address, for requests that were answered with the page. On the log written for the test, it printed three lines.

text
      2 ChatGPT-User /sample-page/
      1 Claude-User /sample-page/
      1 ChatGPT-User /hello-world/

That is a count of fetches. OpenAI's, Anthropic's and Perplexity's pages say the assistant "may" or "might" visit a page when asked, so an answer can be given without a fetch, and none of them says how many fetches one question makes. A fetch is evidence that a page was read for somebody. It is not a count of people, and it is not a citation.

Count arrivals from assistants

The same log holds visits, with no cookie and no script involved. Each line records the referrer the browser sent and the address that was asked for. This command counts requests whose referrer is the web address of one of five assistants, and requests that carry ChatGPT's parameter with no such referrer.

bash
awk -F'"' '
  { split($4, ref, "/"); from = ref[3]; split($2, req, " "); page = req[2] }
  from ~ /^(www\.)?(chatgpt\.com|perplexity\.ai|claude\.ai|copilot\.microsoft\.com|gemini\.google\.com)$/ { sub(/\?.*/, "", page); print from, page; next }
  page ~ /[?&]utm_source=chatgpt\.com/ { sub(/\?.*/, "", page); print "utm_source=chatgpt.com", page }
' /path/to/access.log | sort | uniq -c | sort -rn

On the same log it printed four.

text
      2 chatgpt.com /sample-page/
      1 www.perplexity.ai /hello-world/
      1 utm_source=chatgpt.com /sample-page/
      1 copilot.microsoft.com /

A line that begins with a site's name is a request that arrived from that site. A line that begins utm_source=chatgpt.com carried the parameter and came with no assistant's referrer. The names in the command are those products' web addresses. Change the list to match the sources your own Analytics report shows.

This count has the same blind spot as Analytics: a visit with no referrer and no parameter looks like any other. It does count visitors that Analytics missed because a script was blocked or never loaded.

What both commands assume

Both read the "combined" log format. Apache's documentation defines it, and nginx's says it is the format used when no other is set. In it the address asked for is the seventh item on a line and the status is the ninth, and the request, the referrer and the browser's name each stand between double quotes. A log kept in another format has them elsewhere, and the commands will count wrongly without saying so. The test site's Apache was set to write this format. The commands were run on a log written in it for the test, since no assistant visits a test site.

Three more limits apply.

  • A name can be borrowed. Anything can send a request that calls itself ChatGPT-User. Google's and Bing's pages both warn that a user-agent string can be spoofed, and OpenAI and Perplexity publish the addresses their fetchers use.
  • What a CDN answers never reaches the server. A request that a CDN in front of the site refuses, or answers from its own copy, leaves no line in the server's log.
  • The log is kept for a limited time. Ask the host how many days.

If the log shows no fetch from any assistant, check that they are let in. The AI crawler access check reads a site's robots.txt for each crawler by name.

Google Analytics sets cookies. Google's EU user consent policy requires a site that uses its products to obtain consent from visitors in the European Economic Area, the United Kingdom and Switzerland for the use of cookies where the law requires it. That is Google's rule for its customers, described here from its text. It is not legal advice, and other places have rules of their own. GDPR and WordPress covers the site's side. The access log holds each visitor's IP address, so treat a copy of it with the same care.

Keep a record you can compare

A figure read once says little. The same figure read the same way each month says something.

  1. Pick a day of the month and a period, such as the 1st, for the calendar month before.
  2. Write down three lines, each with the day it was read. Visits: sessions with the medium ai-assistant, and sessions by source for each assistant's name. Appearances: impressions in the generative AI report and citations in Bing's. Fetches: what the command for fetches printed.
  3. Add what the visits did: key events for those sessions.
  4. Compare each line with itself, month on month. Do not add the lines together.
  5. Treat an answer you saw as one reading. What an assistant said when you asked it a question is what it said to you, on that day.

A score is none of these lines. Google's guidance on third-party tools covers products that promise improvements in AI experiences. It says third-party tools have no access to its internal ranking data and that any predictions they make are their own. A score from such a product is not a count of visits, impressions or citations from any report above.

None of this changes how often an assistant sends anyone. It tells you whether anyone came. Generative engine optimization sets out what each engine documents about being cited, and what is guesswork.

When to get help

Hand it over if the reports disagree and you cannot tell why, or if you would rather have them read for you. WP Ministry's AI search optimization is a one-time check of whether AI assistants and Google's AI answers can reach a WordPress site, what Google's and Bing's own reports say they have done with it, and what to change. No citation is promised.

Common questions

Why does ChatGPT traffic show as Direct, Unassigned or "(not set)" in GA4?

Direct means the visit arrived with no referrer and no parameter, so Analytics had nothing to go on. "(not set)" as the medium is what Google's page says a missing UTM parameter shows as, which is the case for an address tagged with utm_source=chatgpt.com alone. Such a visit matches no channel by the written rules. Search the "Session source / medium" dimension for chatgpt to find those rows.

Does GA4 count clicks from Google's AI Overviews as AI traffic?

No. Google's help page says the AI Assistant channel excludes AI Overviews and AI Mode, and that Organic Search includes them. In Analytics they are part of the visits from Google Search and cannot be set apart.

Is a citation in Bing's AI Performance report a visit?

No. Bing's help page says a citation does not represent traffic or clicks. Clicks from chat answers are in the Search Performance report, inside the "Web and Chat" source, together with clicks on ordinary results.

Can I see what people asked before they came to my site?

Not from any of these reports. Analytics has the source and the page. Search Console's generative AI report has no queries. Bing shows grounding queries, which its help page says are grouped phrases and not what users typed.

Does utm_source=chatgpt.com on my addresses make duplicate pages?

On WordPress the tagged address is answered with the same page, and the page's canonical tag names the address without the parameter. The command above shows what your own site prints.

More on this subject

AI search check, done for you

AI search check is $199. Every place an AI crawler can be blocked, Google's and Bing's AI reports read, and a written list of what to change. It starts with a free diagnosis.