How to Analyze a Search Console CSV With Claude Code
Export matched query-by-page rows from Search Console, calculate CTR correctly, and use Claude Code to decide what to refresh or investigate.
Eight synthetic rows covering three queries and two finalized 28-day windows.
When clicks fall, a query total tells you which term to investigate. The query-by-page rows tell you which URL changed and which URL still serves the reader. Start there before asking Claude Code to recommend a refresh.
Export the pages that appeared for a specific query
Open Performance in Search Console and use the Search results report. Set the search type to Web, choose a country and device, then filter to the exact query. Open the Pages tab and export the report. Keep the Pages table and label each row with the query and filters you selected.
Repeat for a second finalized period with the same filters. Use two windows of the same length. The sample uses 28 days in each so weekday mix is consistent. Dates are inclusive and use Pacific time.
For a batch of queries, use the Search Analytics API with query and page in the same request. A generic export may contain a Queries table and a separate Pages table. Those are different totals and lack a key that tells you which page appeared for a query.
Related reading
{
"startDate": "2026-10-13",
"endDate": "2026-11-09",
"type": "web",
"dataState": "final",
"dimensions": ["query", "page"],
"dimensionFilterGroups": [{
"filters": [
{ "dimension": "country", "operator": "equals", "expression": "usa" },
{ "dimension": "device", "operator": "equals", "expression": "DESKTOP" }
]
}],
"rowLimit": 25000
}Work the CSV from clicks and impressions
In the sample, the guide receives 48 clicks on 1,200 impressions in the prior window and 24 on 1,200 in the current window. Divide clicks by impressions to get 4.00% and 2.00%. The change is a drop of 2.00 percentage points, or a 50% relative decline in CTR.
The template goes from 1 click on 45 impressions to 5 on 85. Its CTR is higher in the current window, but it has fewer impressions and serves a separate task. The guide's average position moved from 5.8 to 6.0. That average can hide differences across days and results, so keep the cause of the decline open.
| URL | Prior clicks / impressions | Current clicks / impressions | CTR change |
|---|---|---|---|
| /guides/seo-audit-checklist | 48 / 1,200 | 24 / 1,200 | 4.00% → 2.00% (−2.00 points) |
| /templates/seo-audit-checklist | 1 / 45 | 5 / 85 | 2.22% → 5.88% (+3.66 points) |
Give Claude the rows and page notes together
Install the starter skill, then map your export to the columns in the sample. Use one row per query, page, segment, and window. If you use your own data, give Claude a short note on what each page offers and any SERP result you actually inspected. Share files you are allowed to process with your configured Claude provider.
The archive includes the sample's calculated CTR and status values. The Python helper can produce the same comparison for your own CSV. It marks missing rows and leaves CTR blank when impressions are zero.
Related reading
/agentseo-claude-seo sample refresh
/agentseo-claude-seo console data/query-page.csv data/page-notes.mdCheck missing rows before diagnosing cannibalization
The third practice case reports one guide in the prior period and a tool in the current period for “keyword cannibalization audit.” It provides no daily rows for either URL. An omitted row is missing evidence, so leave its CTR blank.
Pull daily query-by-page rows for both URLs, check each URL in Search Console, and inspect the current SERP under matching filters. If the pages serve different jobs, they can coexist. If comparable observations show that similarly purposed URLs repeatedly replace each other, investigate the content and internal links before choosing a remedy.
For the refresh case, the narrow next action is to add a filled example to the existing guide and check how its snippet describes the page. After the change, compare the same segment once you have a full period. Several factors can still move clicks during that time.
Keep the workflow moving
Bring one query and two comparable windows
Use the sample column layout and start with the page you already suspect needs work.
FAQ
Questions teams usually ask next
Can I join Queries.csv and Pages.csv to see which URL ranks for a query?
Those tables do not share the query-and-page key. Export the Pages table after filtering to a query or request both dimensions together through the Search Analytics API.
Does a missing Search Console row mean zero impressions?
An omitted row should be treated as unknown. Search Console can withhold sparse queries or omit rows due to limits. Keep omitted rows distinct from explicit zero values.
Should I redirect a page when two URLs appear for the same keyword?
Check whether both URLs serve the same task and whether comparable data shows repeated switching. A guide and its worksheet may both be useful destinations.
More in this topic
Claude Code and builder-marketer workflows
Claude Code
Claude SEO With a Free Claude Code Skill
Use a free Claude Code SEO skill with a Search Console sample and dated Google results. See when to refresh a page, create one, or investigate.
Content planning
Build a Claude Code SEO Content Brief From Google Results
Build an SEO content brief in Claude Code using Google results. Get a filled example, a Markdown template, and prompts for dated or live data.