How to attribute AI search traffic to each location
For a multi-location business, 'AI sent us traffic' isn't enough. How to split AI-referred visits and conversions by location page, where GA4 helps, where it can't, and how to tie it back to visibility per city.
A regional manager doesn't care that AI-referred visits went up across the site. They care whether ChatGPT is sending people to their branch. For a business with ten or a hundred locations, AI search reporting only becomes useful once it's split by location.
The general setup is in our guide to measuring AI search traffic and conversions. This post is the local layer on top of it: what you can attribute to a location, what you can't, and how to build the report.
What you can and can't attribute
The thing you can measure reliably is the landing page. When someone clicks a link in a ChatGPT or Perplexity answer, the visit usually arrives with a referrer from that assistant, and it lands on a specific URL. If each location has its own page, the landing page is a decent stand-in for the location.
Several things you can't see, or can't see cleanly:
- The prompt. The referrer tells you which assistant sent the visit, not what the person asked.
- Visits without a referrer. Some apps and in-app browsers don't pass one, so those visits land in direct.
- Google's AI features. Clicks from AI Overviews and AI Mode arrive as Google traffic. Google says appearances in those features are included in the overall Web search data in Search Console's Performance report.
- Influence without a click. Someone reads that your Leeds branch is well reviewed, then walks in or calls. No analytics tool records that.
So the per-location number is a floor. Report it as one.
Step 1: give every location its own landing page
This sounds obvious, but it's a common gap. If AI answers link to a single /locations page with a store locator, every AI visit lands on the same URL and you can't split anything. The same problem makes the branches hard for crawlers to read, which we cover in can AI crawlers read your location pages?.
One URL per location, with that location's content in the HTML, solves both. If you have location subpages (services at a branch, a team page), keep them under the same folder so they roll up cleanly.
Step 2: define a conversion per location
Pick the actions that mean a branch got business: a booking form submitted, a click on the branch phone number, a click on directions, a quote request. Make sure each event carries the location it belongs to, either through the page path or an event parameter with a location ID. A booking form shared across all branches should record which branch was chosen.
Without this, you'll know that AI visitors converted, but not where.
Step 3: set up GA4 carefully
In GA4 or a similar tool, a custom channel group that matches known AI referrer domains (chatgpt.com, perplexity.ai, gemini.google.com, copilot.microsoft.com and others) gives you an AI channel. Add landing page as the breakdown and filter to your location folder. That's the core report.
Two cautions. First, GA4's city dimension is the visitor's estimated location, not the branch page they landed on. Someone in Amsterdam can read about your Utrecht branch before a trip. Use landing page for branch attribution, and treat visitor city as context. Second, the referrer list needs maintenance, because assistants add and change domains. A stale list undercounts without anyone noticing.
Step 4: build the per-location table
The report we hand to regional teams has one row per location page and a few columns: AI-referred visits by assistant, conversions from those visits, conversion rate, and the same figures for the previous period. Add organic search alongside so the AI numbers have context.
Small numbers are common at branch level. A location with, say, eleven AI visits a month will bounce around, so look at quarters and at groups of similar branches rather than reacting to one month.
Step 5: join traffic to visibility per city
Traffic alone can't tell you why a branch gets AI visits or doesn't. Put it next to what the engines say for that city's prompts.
Some combinations we look for. A branch named often in answers for its city but getting almost no AI visits may be mentioned without a link, or linked through a directory listing instead of your page. A branch getting AI visits but few conversions needs a better next step on the page: clearer booking, the phone number higher up. A branch that's absent from answers and gets no visits goes back on the content and access list.
How we report it
We run this in Promptwatch. Visitor analytics tracks AI-referred traffic and conversions from ChatGPT, Perplexity, Gemini, Claude, Copilot, DeepSeek, Kimi, Mistral, and more, through a lightweight script, the Google Tag Manager template, or the WordPress plugin. On the brand plans, the 360 Insights view joins crawler logs, citation clicks, and AI-referred visits per page, so for each location page you can see whether bots fetched it, whether it got cited, and whether those citations turned into visits. Search Insights overlays Google Search Console and Bing Webmaster traffic on the same pages, which helps with the AI Overviews gap mentioned above.
On the visibility side, city monitors (from the Business plan and on every agency plan) run each city's prompts from that city, and citation analytics shows which pages got cited there. Custom reports and the Looker Studio connector, from Professional and on all agency plans, let us send each regional team its own view.
If you'd like help setting up per-location AI reporting, write to hello@visiblyrank.com.