← Resources

Playbooks

Analytics keywords report

Step-by-step on building an analytics keywords report by joining Search Console queries with GA4 conversion data - so you know which keywords actually drive revenue, not just clicks.

Updated

Before you start

  • GA4 property installed on your domain with conversions configured
  • Google Search Console verified on the same domain
  • Both connected (Search Console linked from GA4 Admin -> Product links)
  • A spreadsheet or BI tool (Looker Studio, Mode, Metabase) for the final report

The playbook

8 steps

0/8
  1. Connect Search Console to GA4

    GA4 -> Admin -> Product links -> Search Console links -> Link. Pick your Search Console property and the GA4 web stream. This enables the Search Console reports inside GA4 - Queries and Google organic search traffic. Without this link, GA4 has no keyword data at all (GA4 sees sessions; Search Console sees queries; the link bridges them).

    Expected outcome

    Search Console queries visible in GA4 under Reports -> Acquisition -> Search Console.

  2. Publish the Search Console reports inside GA4

    Once linked, the reports exist but aren't published by default. GA4 -> Library -> Search Console collection -> Publish. Now Queries and Google organic search traffic appear in your Reports navigation. This is the GA4-native view; it's limited but free.

    TipGA4's Search Console reports use unsampled data direct from Search Console. They're trustworthy but capped at 1,000 rows in the UI - use the export for full data.

    Expected outcome

    Search Console reports live in GA4 Reports navigation; queryable in the UI.

  3. Set up the GA4 conversion mapping per landing page

    The bridge between keyword and revenue is the landing page. Search Console knows query -> landing page. GA4 knows landing page -> session -> conversion. Join on landing page. In GA4, build a custom exploration: Dimensions = Landing page; Metrics = Sessions, Conversions, Total revenue. Filter to Session source = google / medium = organic.

    Expected outcome

    GA4 exploration showing organic conversions and revenue per landing page.

  4. Export Search Console data via the API for richer joins

    GA4's UI caps at 1,000 rows. For real analysis, pull Search Console data via its API (or the Looker Studio connector). Endpoint: searchanalytics.query. Pull dimensions [query, page, country, device] - lets you slice by branded vs non-branded, by device, by market. Export to Google Sheets or BigQuery for the join.

    // Search Console API - Node
    const { google } = require('googleapis');
    const sc = google.searchconsole({ version: 'v1', auth });
    const res = await sc.searchanalytics.query({
      siteUrl: 'sc-domain:shuttergen.com',
      requestBody: {
        startDate: '2026-04-21',
        endDate: '2026-05-20',
        dimensions: ['query', 'page', 'device'],
        rowLimit: 25000,
        dataState: 'final'
      }
    });

    Expected outcome

    Full Search Console export at the query + page + device grain ready to join.

  5. Pull matching GA4 conversion data via Data API

    GA4 Data API returns conversions, revenue, sessions per landing page. Pull the same date range. Dimensions = pagePath; Metrics = sessions, conversions, totalRevenue, engagementRate. Filter sessionDefaultChannelGroup = 'Organic Search'. Join to Search Console output on page = pagePath.

    // GA4 Data API - Node
    const response = await analyticsDataClient.runReport({
      property: 'properties/123456789',
      dateRanges: [{ startDate: '2026-04-21', endDate: '2026-05-20' }],
      dimensions: [{ name: 'landingPage' }],
      metrics: [
        { name: 'sessions' },
        { name: 'conversions' },
        { name: 'totalRevenue' }
      ],
      dimensionFilter: {
        filter: {
          fieldName: 'sessionDefaultChannelGroup',
          stringFilter: { value: 'Organic Search' }
        }
      }
    });

    Expected outcome

    Per-landing-page organic conversion and revenue data ready to join with Search Console.

  6. Join the two datasets on landing page

    In your spreadsheet or BI tool, join Search Console rows to GA4 rows on page URL. The resulting table: query | page | clicks | impressions | position | sessions | conversions | revenue. This is the analytics keywords report. Every keyword now has revenue attached, not just clicks.

    TipMany queries map to the same landing page. Allocate that page's revenue proportionally to queries by clicks share - imperfect but the best approximation available.

    Expected outcome

    Single joined table linking query-level Search Console data to landing-page-level GA4 conversion data.

  7. Visualize in Looker Studio for ongoing access

    Looker Studio has native connectors for both Search Console and GA4. Build the joined report once; refresh automatically. Standard sections: top revenue-driving queries, query-level CTR by position bucket, branded vs non-branded split, device split, week-over-week deltas. Share with the team via link; auto-updates daily.

    Expected outcome

    Always-on Looker Studio dashboard the team accesses directly without bothering analytics.

  8. Build the weekly review cadence

    A report no one reads is dead. Block 15 minutes weekly: scan top 20 revenue queries for week-over-week drops, scan top 20 by impressions for new query opportunities, flag landing pages with high impressions + low CTR (under-optimized titles), flag queries with high clicks + low conversion (intent mismatch). Document 2-3 actions per week.

    Expected outcome

    Weekly review producing 2-3 actionable items per week instead of a dashboard collecting dust.

Shuttergen

Know which keywords convert? Match them in paid.

Your analytics keywords report shows which queries convert organically. Shuttergen generates paid creative tuned to the same converting query intent - so paid and organic compound instead of duplicating.

Pitfalls

What goes wrong

  • Treating Search Console clicks as final attribution

    Search Console clicks ≠ GA4 sessions. There's typically a 5-20% gap due to ad blockers, bot filtering differences, and cross-device. The joined report is directional, not exact. Don't argue with the discrepancy; use both as triangulation.

  • Ignoring landing-page-to-query attribution math

    One landing page often ranks for 50+ queries. Attributing the page's full revenue to each query overstates everything. Allocate proportionally by clicks share - imperfect but the best signal you have.

  • Forgetting to filter to organic only

    GA4's landing page reports include direct, social, email, and paid traffic. Without the Organic Search channel filter, the report mixes keyword-driven sessions with everything else and the analysis is meaningless.

  • Pulling 1,000-row UI exports instead of API

    The GA4 UI for Search Console caps at 1,000 rows. Most domains have tens of thousands of queries. Use the API or Looker Studio connector for full data - the long tail is where 30-50% of revenue actually lives.

  • Building the report and never reviewing it

    The dashboard is the easy part. The compounding value is the weekly 15-minute review that catches drops, opportunities, and intent mismatches in time to fix them.

Limits

When this playbook won't work

  • Your conversions aren't set up correctly in GA4 (the revenue numbers will be wrong; fix conversions first)
  • Search Console hasn't accumulated 90+ days of data on your domain (the sample size is too small)
  • Your traffic is dominated by paid/social/direct (organic share too small to matter)
  • You're on Universal Analytics still - migrate to GA4 first; UA stopped collecting data in 2023

Why this report matters more in 2026 than ever

The (not provided) era ended; the (not measured) era began. Google stopped passing keyword data to Google Analytics in 2011 (the famous 'not provided'). Search Console fills part of that gap - but only if you bridge it to your conversion data. Without that bridge, you have Search Console showing clicks and GA4 showing conversions, but no way to know which keywords drove the conversions.

AI Overviews make the bridge more important, not less. As AI Overviews compress click-through, the keywords that still produce clicks become more valuable per click. The teams that know exactly which queries convert can defend those queries; the teams that don't are flying blind.

Most analytics teams know how to build it but never do. It's not a hard technical project - 4-6 hours for a polished version. The bottleneck is prioritization, not capability. Make it a one-week sprint; the dashboard pays back monthly forever.

Know which keywords convert? Match them in paid. Your analytics keywords report shows which queries convert organically. Shuttergen generates paid creative tuned to the same converting query intent - so paid and organic compound instead of duplicating.

Generate matching creative free

Looker Studio template structure

Page 1: Headline scorecard. Total organic sessions, conversions, revenue this period vs last; top 5 revenue queries; top 5 revenue landing pages; CTR by position bucket (1, 2-3, 4-10, 11+).

Page 2: Query performance. Sortable table of all queries with impressions, clicks, position, sessions, conversions, revenue. Filter widgets for branded vs non-branded, device, country, date range.

Page 3: Landing page performance. Same metrics aggregated to landing page. Pages with high impressions + low CTR are the title-tag optimization opportunities; pages with high clicks + low conversion are the intent-mismatch fixes.

Page 4: SERP feature impact. If you're pulling rank data alongside (via DataForSEO or Ahrefs API), overlay SERP feature presence on each query. Lets you see traffic dilution from AI Overviews and featured snippets you don't own.

Page 5: Weekly delta. Auto-calculated week-over-week movers - top 10 risers and top 10 fallers across the metrics. The weekly review starts here.

Internal: keyword-monitoring, keyword-analysis-in-seo, keyword-ranking-api.

FAQ

Frequently asked

What is an analytics keywords report?
A joined view of Search Console query data and GA4 conversion data, attributing organic revenue to specific keywords. Bridges the gap left when Google stopped passing keywords to analytics in 2011.
How do I see keywords in GA4?
Link Search Console to GA4 (Admin -> Product links -> Search Console links). Publish the Search Console collection from GA4 Library. Queries report appears under Reports -> Acquisition -> Search Console. For full data beyond the 1,000-row UI cap, use the Search Console API.
Why doesn't GA4 show keywords natively?
Google has not passed keyword data to analytics since 2011's 'not provided' change. Search Console retains the data and exposes it via API, but you have to link the two systems and join on landing page to attribute conversions to queries.
How do I join Search Console data with conversion data?
Both systems share the landing page URL. Pull Search Console queries by [query, page]; pull GA4 conversions by [landing page]; join on page = landing page. Allocate page-level revenue across queries proportionally by clicks share.
What's the best tool for an analytics keywords report?
Looker Studio - free, native connectors for both Search Console and GA4, scheduled refresh. For deeper joins or large datasets, push both into BigQuery and query with SQL. Spreadsheets work for sub-10K-row datasets but break above that.
How accurate is the keyword-to-revenue attribution?
Directional, not exact. Multiple queries usually rank one page, so revenue is allocated proportionally - imperfect but the best approximation. Also, Search Console clicks and GA4 sessions diverge 5-20% due to ad blockers and bot filtering. Use the report for direction, not for board-level revenue claims.
How often should I refresh the report?
Daily auto-refresh in Looker Studio; weekly human review (15 minutes). Search Console data has a 2-3 day lag; GA4 is near-real-time. Weekly cadence is the right frequency to catch shifts without drowning in noise.

Related

Keep reading

Know which keywords convert? Match them in paid.

Your analytics keywords report shows which queries convert organically. Shuttergen generates paid creative tuned to the same converting query intent - so paid and organic compound instead of duplicating.