query-deep-dive
Skill0 starsChanged 21 days agoMITView on GitHub
Build a picture of one query for a Search Console property with the GSC Wizard MCP tools: its click, impression, CTR and position series, the pages Google serves for it, its country and device split, whether several pages cannibalize it, its estimated GA4 value when GA4 is linked, and Bing keyword demand plus the pages Bing ranks for it, condensed into a query scorecard with recommendations. Use when the user names one keyword and asks "how am I doing for X", "why did I lose rankings for X", "which page ranks for X", "deep dive on this keyword", or "what is the demand for X on Bing".
In this repository33 other files it gives its agents.
- ai-assistant-trafficSkill
- anomaly-checkSkill
- bing-crawl-healthSkill
- bing-performanceSkill
- branded-splitSkill
- cannibalizationSkill
- client-reportSkill
- content-decaySkill
- content-groupsSkill
- core-web-vitalsSkill
- country-deviceSkill
- ctr-optimizationSkill
- experiment-resultsSkill
- ga4-overviewSkill
- indexing-healthSkill
- indexing-trackerSkill
- indexnow-submitSkill
- long-tail-analysisSkill
- merchant-center-healthSkill
- onpage-auditSkill
- page-deep-diveSkill
- portfolio-overviewSkill
- property-setupSkill
- quick-winsSkill
- ranking-changesSkill
- shopping-performanceSkill
- site-auditSkill
- sitemap-auditSkill
- site-migrationSkill
- traffic-dropSkill
- traffic-forecastSkill
- weekly-reportSkill
- yandex-performanceSkill
The file
We split this skill into the rules it gives an agent
7 rules. About 0 are common, 2 are distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 14
Use the last 28 days compared with the previous period unless the user specifies dates.
- Very specific: line 17
Daily series: Call get_query_performance with siteUrl, query and the optional startDate/endDate, leaving pageUrl out so the query is …
- Very specific: line 23
Pages serving the query: Call query_search_analytics with dimensions: ["page"], filters: [{ "dimension": "query", "operator": "equals", …
- Very specific: line 31
Cannibalization check: Call analyze_cannibalization with siteUrl, the same dates, minImpressions: 10 and limit: 1000 (the schema's …
- Distinctive: line 33
When the query is absent, it either has one page or fell under the impression floor.
- Very specific: line 36
GA4 value, when linked: Call get_query_value_attribution with siteUrl, the same dates, organicOnly: true and limit: 5000 (the schema's …
- Very specific: line 40
Bing demand: Call get_bing_keyword_stats with keyword set to the query.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Query Deep Dive
Explain everything the connected tools know about one keyword and condense it into a query scorecard, the pages serving it, where it ranks by market and device, and recommendations. The user's request may contain a property, the query text, a date range, a market or device, and a focus hint such as "compare with Bing"; honor all of them.
Workflow
- Resolve the property, the query and the window. If the user's request or the conversation names a property, use it. Site URLs use GSC formats:
sc-domain:example.comorhttps://www.example.com/. Otherwise calllist_sitesand pick the obvious match. If several plausible properties exist, ask the user which one before continuing.- Take the query text exactly as given; the tools below match it exactly, and step 2 says what to do when no row matches.
- Use the last 28 days compared with the previous period unless the user specifies dates. The daily tool takes no comparison parameter, so compare the first and second half of the window yourself and say the delta is derived.
- GSC data lags about 2 to 3 days: never treat the most recent 2 days as complete, and if a dip appears at the very edge of the range, say it is likely reporting lag, not a real drop.
- Daily series. Call
get_query_performancewithsiteUrl,queryand the optionalstartDate/endDate, leavingpageUrlout so the query is measured site-wide.dailyholds one row per day, oldest first, with clicks, impressions,ctrand position.ctrvalues are already percentages on a 0-100 scale. Never multiply them by 100.position: lower is better, and a change toward a lower number is an improvement; never color it as a decline.- Describe the shape: flat, a step change on a named date, a slide, a spike, or seasonality. Position worsening with impressions steady is a ranking loss; impressions falling with position steady is demand; clicks falling with both steady is the snippet or a SERP feature.
- The
queryfilter is an exact match. Whendailyis empty the response carriesemptyBecause: callquery_search_analyticswithdimensions: ["query"]andfilters: [{ "dimension": "query", "operator": "contains", "expression": "<core term>" }]to list the variants Google records (plural, word order, accents), pick the one with the most impressions or roll the close variants up, and say which you did. - Once step 3 names the top page, call
get_query_performanceagain withpageUrlset to it; the gap between the page series and the site-wide series is the share other pages take.
- Pages serving the query. Call
query_search_analyticswithdimensions: ["page"],filters: [{ "dimension": "query", "operator": "equals", "expression": "<query>" }]androwLimit: 50. Rows carrykeys(the URL), clicks, impressions,ctr(0-100) and position.- One page holding most impressions is a clear owner; two or more with comparable impressions and different positions is a split, which step 5 scores.
- Quote the query total from
coverage.filteredTotalsrather than summing rows.
- Markets and devices. Repeat the same filtered call with
dimensions: ["country"]and thendimensions: ["device"]; country codes come back as lowercase ISO 3166-1 alpha-3 (usa) and device values as uppercase (MOBILE), and anequalsfilter on either must use that exact case.- The overall position is impression-weighted, so a strong rank in a small market can hide a weak rank in the market that matters. Report the position in the top 3 markets and on each device.
- Name the market the user cares about when the user's request gives one, and carry it into step 7's
country.
- Cannibalization check. Call
analyze_cannibalizationwithsiteUrl, the same dates,minImpressions: 10andlimit: 1000(the schema's maximum), and look for the query incannibalized.- A row carries
pageCount,totalClicks,totalImpressions,entropy(Shannon entropy over the pages' impressions: higher means a more even split, which is worse) andpages(each withurl, clicks, impressions,ctrand position, most impressions first). - When the query is absent, it either has one page or fell under the impression floor; say which the step 3 rows suggest.
- Report the split here and point to the cannibalization skill for the full winner-and-fix workflow rather than redoing it.
- A row carries
- GA4 value, when linked. Call
get_query_value_attributionwithsiteUrl, the same dates,organicOnly: trueandlimit: 5000(the schema's maximum), then find the query's row inrows.- The figures are estimates by proportional click share over the query to page to landing-page join, never measured revenue: read
estSessions,estKeyEvents, andestRevenueonly whenhasRevenueis true, plusmatchedClickShare(0-1) for how much of the named-query click volume the estimates cover. - A
notConfiguredanswer carries areason:no_scopemeans Google Analytics is not connected on the GSC Wizard account named inaccount(withreauthRequired: truethe Google account must be reconnected), andno_propertymeans GA4 is connected but no GA4 property is linked to this site. Relay thehintand mark value "not linked".
- The figures are estimates by proportional click share over the query to page to landing-page join, never measured revenue: read
- Bing demand. Call
get_bing_keyword_statswithkeywordset to the query; it takes nositeUrlbecause this is marketplace demand, not property data.countrydefaults to "us" andlanguageto "en-US": set them to the user's main market, converting the alpha-3 code from step 4 to the two-letter code Bing expects (usa to us, gbr to gb, deu to de) with a matching BCP-47 tag.statsholds weekly rows, oldest first, withdate,impressionsandbroadImpressions;countis the number of weeks. Read the seasonality and the broad-match headroom, and compare the demand curve with the GSC impression series from step 2.emptyBecausemeans Bing has no history for that keyword in that market. AnotConfiguredanswer with ahintmeans Bing Webmaster Tools is not connected in the app: say so and skip both Bing steps.
- Bing pages. Call
list_bing_sites(no arguments) and check insiteDetailsthat the site isisVerified, since Bing serves data only for a verified site. Then callget_bing_query_page_statswithsiteUrl(the GSC property URL),queryset to the query text, and no dates for everything Bing has (about 16 months; Bing dates rows by week, so any window selects whole weeks).pairsrun by clicks then impressions, each withquery,url,clicks,impressions,ctr(0-100, and above 100 when Bing logs more clicks than impressions) andposition.- Compare Bing's page choice with Google's from step 3; a different page winning on Bing is a hint about which page the content best supports.
truncated: truemeans Bing had more;emptyBecausesays why no pair came back.
Output
Present the results in this order, with compact markdown tables for multi-row data and prose only for interpretation:
Query scorecard, one table with the tool and date range on the line above it:
Area Verdict Evidence Visibility ... impressions, position and trend shape (step 2) Clicks and CTR ... clicks, CTR against the position (step 2) Pages ... owner page, split, entropy (steps 3 and 5) Markets and devices ... position in top markets and per device (step 4) Value ... estimated sessions, key events, revenue (step 6), or "not linked" Bing ... weekly demand, Bing's page, Bing position (steps 7 and 8), or "not configured" - Pages serving it: a table (Page, Clicks, Impressions, CTR, Position) of up to 10 rows, with the Bing page beside the Google page when both exist.
- Where it ranks: a table of the top markets and the three devices with impressions, clicks and position.
- Recommendations: end with a short prioritized list of 3 to 7 concrete recommendations, each naming its evidence (consolidate two pages because the split has high entropy; rewrite the title because CTR at position 3 is low on mobile; build a market page because the biggest market ranks on page 2; cover the broad-match variants Bing shows demand for).
Present every multi-row result as a compact markdown table (top rows only, typically 5 to 10); keep prose for interpretation, not for restating numbers. Judge by the clicks and impressions at stake, not by percentage alone, and do not fabricate rows the tools did not return. When the user wants the fix for a split query, point to the cannibalization skill; for everything about the owner page, to page-deep-dive; for a ranked list across many queries, to quick-wins.
Error handling
If any tool call fails with an authentication or subscription error, tell the user to run /mcp to (re)authenticate, and that a GSC Wizard account with an active plan or trial plus a connected Google Search Console account is required. If the property is not found, re-run list_sites and offer the closest matches instead of guessing a URL format. If a single tool fails for another reason, report the gap in the relevant section and complete the rest of the workflow with the remaining data.
Grounding
Every number you report must name the tool it came from and the date range it covers, for example "clicks 12,340 (get_site_summary, 2026-09-21 to 2026-09-27)". For a table, state the tool and date range once on the line above it. If you derive a figure yourself (a delta, a sum, a share), say so and name the tool outputs it was computed from. Never report a number no tool returned.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

