hello@newnorth.nl+31 (0) 85 401 31 62
/Journal

(not provided) in Google Analytics: where your keywords went

ReferenceAnalytics2023.01.30
Freek Kampen
Freek KampenCo-founder, New North Digital

Google stopped handing the search term to your site. Why it did, where those words still live, and how to read them per page.

What (not provided) means

(not provided) is what Google Analytics shows instead of the keyword someone used to find you. The keyword exists and Google knows it. It just never reaches your site.

Universal Analytics put that value straight in the keyword report, usually at the top with eighty to ninety percent of organic traffic behind it. GA4 dropped the report altogether. Organic shows up as a channel, with no search term attached.

Why the keywords disappeared

Google switched signed-in users to encrypted search in October 2011 and extended it to everyone in 2013. Since then the search term is no longer part of the referrer URL that hits your server.

No tag fixes this. Neither does a server-side container or a setting somewhere. The data never leaves Google, so there is nothing to intercept. Any tool that claims to decode (not provided) is selling you an estimate.

(not provided) versus (not set)

Two values that look alike and have nothing to do with each other.

  • (not provided) means Google is withholding the value. Nothing you can do.
  • (not set) means GA4 received no value at all. That is usually an implementation problem, and those you can fix.

So if your landing page report is full of (not set), the issue is the order your tags fire in, not keywords. We covered that separately in where those (not set) landing pages come from.

Where the keywords do live

Search Console. Your queries are all there, with impressions, clicks and position, going back sixteen months. Google drops rare queries so no single user becomes identifiable, which is why your query totals never add up to your traffic totals.

Search Console linked to GA4. Admin, Product links, Search Console. You get two reports that put the query next to on-site behaviour. Fine for a quick look, too coarse for analysis.

The bulk data export to BigQuery. This is the real answer once you pass a thousand queries a day. Search Console then writes every query, page, country and device combination to your own dataset each day, without the row limit the interface imposes. Turn it on under Settings, Bulk data export.

SELECT query, SUM(clicks) AS clicks, SUM(impressions) AS impressions
FROM `my-project.searchconsole.searchdata_url_impression`
WHERE data_date BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 28 DAY) AND CURRENT_DATE()
  AND url = 'https://yoursite.com/a-page/'
GROUP BY query
ORDER BY clicks DESC

Google Ads. Paid search still has its search terms report, which shows what you actually appeared for rather than what you bid on.

What to do with this

  • Stop expecting keywords in GA4. They are not coming back.
  • Link Search Console to GA4 for the quick look, and use Search Console itself for anything beyond that.
  • Switch on the BigQuery bulk export the moment the thousand-row limit starts to hurt. It only fills from the day you enable it, so earlier is better.
  • If you are looking at (not set) rather than (not provided), go and check your tagging. That one has a real fix.

Want to talk about this?

Let's talk data.

Tell us about your stack, your goals, the data you wish you had.

Takes 1 minute