page-deep-dive
Skill0 starsChanged 22 days agoMITView on GitHub
Build a picture of one URL in a Search Console property with the GSC Wizard MCP tools: its daily click, impression, CTR and position series, the queries it wins and loses, its country and device split, stored and live URL inspection results (quota-aware), a single-page on-page audit, Core Web Vitals, and GA4 sessions, bounce rate and key events when GA4 is linked, ending in a page scorecard with recommendations. Use when the user asks "how is this page doing", "deep dive on this URL", "why did this page drop", "what does this page rank for", or names a single URL and wants everything about it.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- FlorianBruniaux/google-search-console-mcptheir own version, first seen Oct 15, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- FlorianBruniaux/google-search-console-mcp★ 22same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
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
- portfolio-overviewSkill
- property-setupSkill
- query-deep-diveSkill
- quick-winsSkill
- ranking-changesSkill
- shopping-performanceSkill
- site-auditSkill
- sitemap-auditSkill
- site-migrationSkill
- traffic-dropSkill
- traffic-forecastSkill
- weekly-reportSkill
- yandex-performanceSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
13 rules. About 0 are common, 3 are distinctive, and 10 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
10
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_page_performance with siteUrl, pageUrl and the optional startDate/endDate.
- Very specific: line 22
Queries the page wins and loses: Call query_search_analytics with dimensions: ["query"], filters: [{ "dimension": "page", "operator": …
- Very specific: line 30
Stored inspection history, no quota spent: Call list_url_inspections with siteUrl, urlContains set to the page path and latestPerUrl: true.
- Distinctive: line 32
All three canonical fields are null on rows stored before canonicals were kept, so an old row is not evidence of a missing canonical, and a …
- Very specific: line 35
Read verdict, coverageState, indexingState, robotsTxtState, pageFetchState, crawledAs, lastCrawlTime, googleCanonical, userCanonical and …
- Very specific: line 39
On-page audit of this one URL: Call audit_onpage_seo with siteUrl and urls: ["<page URL>"].
- Very specific: line 40
Read the single entry in pages: statusCode, redirected, indexable, indexabilityStatus, noindex, title, titleLength, metaDescriptionLength, …
- Very specific: line 42
If truncated is true and the URL sits in notAudited, call again with that list.
- Very specific: line 45
Read metrics (LCP, INP and CLS with FCP and TTFB, each rated), regressions (a Core Web Vital whose rating band worsened between its two …
- Very specific: line 49
GA4 engagement, when linked: Call get_blended_landing_pages with siteUrl, the same dates, comparisonStartDate/comparisonEndDate for the …
- Very specific: line 50
Read sessions, activeUsers, bounceRate (a 0-1 fraction straight from GA4, so 0.62 is 62%), keyEvents, revenue when present, ga4Matched and …
- Distinctive: line 53
If the page is not among the rows, say the tool lists the property's top landing pages by clicks and this page was not among them.
≈ “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
Page Deep Dive
Explain everything the connected tools know about one URL and condense it into a page scorecard (search, indexing, on-page, speed, engagement), the queries it wins and loses, and recommendations. The user's request may contain a property, the page URL or path, a date range, and a focus hint such as a country or "mobile only"; honor all of them.
Workflow
- Resolve the property, the URL 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.- The page must be a full URL. When the user gives only a path, build the URL from the property's host, and for a
sc-domain:property confirm host and protocol against the rows ofquery_top_pagesrather than guessing between www and the bare host. - Use the last 28 days compared with the previous period unless the user specifies dates. The daily tools take 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.
- The page must be a full URL. When the user gives only a path, build the URL from the property's host, and for a
- Daily series. Call
get_page_performancewithsiteUrl,pageUrland the optionalstartDate/endDate.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 of the trend: flat, a step change on a named date, a gradual slide, a spike, or a weekly rhythm. Impressions rising while clicks stay flat point at the snippet or the position; impressions falling with position steady point at demand or indexing.
- The
pageUrlfilter is an exact match on the full URL. Whendailyis empty the response carriesemptyBecauseand anextStepthat callsquery_search_analyticswith a pagecontainsfilter to list the URL variants Search Console records (trailing slash, protocol, host); rerun with the variant that carries the traffic and tell the user which one it was.
- Queries the page wins and loses. Call
query_search_analyticswithdimensions: ["query"],filters: [{ "dimension": "page", "operator": "equals", "expression": "<page URL>" }]androwLimit: 100; followpagination.nextOffsetasstartRowonly when the user wants the long tail. Rows carrykeys(the query), clicks, impressions,ctron the 0-100 scale and position.- Sort the rows into winners (page 1 with clicks), near misses (position 11 to 20 with real impressions) and snippet losers (page 1 with far fewer clicks than the impressions suggest).
- Query rows cover only the queries Google lists: quote the page total from
coverage.filteredTotals, mentioncoverage.hiddenClicksShare(0-1) when it is large, and never sum the rows into a total.
- 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, since the match is case-sensitive on both data paths.- Compare the page's split with the property's by calling
query_countriesandquery_devicesover the same dates; both return rows with clicks, impressions,ctrand position. - A page that is far more mobile, or far more concentrated in one country, than the property as a whole points at a device- or market-specific cause, which step 8 can test with a
PHONEreading.
- Compare the page's split with the property's by calling
- Stored inspection history, no quota spent. Call
list_url_inspectionswithsiteUrl,urlContainsset to the page path andlatestPerUrl: true.- The
inspectionsrows run newest first and carryverdict,coverage_state,indexing_state,last_crawl_time,google_canonical,user_canonicalandinspection_result_link. - All three canonical fields are null on rows stored before canonicals were kept, so an old row is not evidence of a missing canonical, and a verdict that flipped between two stored rows is a finding on its own.
- The
- Live inspection, quota first. Call
get_inspection_quotawithsiteUrland readcount,limitandremaining(Google allows 2,000 inspections per property per day; when the response carriesunavailable: truethe counter could not be read and those numbers are placeholders, so treat the quota as unknown and inspect once at most). Skip the live call whenremainingis under a tenth oflimit, or when a stored result from the last 7 days exists and the series shows no indexing symptom, and say which rule applied. Otherwise callinspect_urlonce withsiteUrlandinspectionUrl.- Read
verdict,coverageState,indexingState,robotsTxtState,pageFetchState,crawledAs,lastCrawlTime,googleCanonical,userCanonicalandinspectionResultLink. - When
googleCanonicaldiffers fromuserCanonicaland both are set, Google credits this page's search data to another URL, which often explains a thin series in step 2. A null canonical means Google did not report one (common for pages it has not indexed) and must never be filled in from the page. - A response with
quotaExhausted: truemeans the day's quota is gone: rely on step 5, follow thenextStepit names, and say the quota resets tomorrow.
- Read
- On-page audit of this one URL. Call
audit_onpage_seowithsiteUrlandurls: ["<page URL>"]; the URL must belong to the property, and although the tool accepts up to 25 URLs this workflow audits one.- Read the single entry in
pages:statusCode,redirected,indexable,indexabilityStatus,noindex,title,titleLength,metaDescriptionLength,h1Count,wordCount,canonicalUrl,canonicalIsSelf,internalLinks,externalLinks,imagesMissingAlt,structuredDataTypes,schemaIssuesandissues(each withid,severityandmessage). - Cross-check
canonicalUrlagainstuserCanonicalfrom step 6. The tool returns the meta description's length, not its text. - If
truncatedis true and the URL sits innotAudited, call again with that list; arobotsNotemeans robots.txt disallows the audit crawler, so report that instead of on-page findings.
- Read the single entry in
- Core Web Vitals. Call
get_core_web_vitalswithsiteUrlandurlset to the page. The schema takes an optionalurl; without it the tool measures the whole origin, so always say which level the numbers describe. Start withformFactor: "ALL"and add aPHONEcall when step 4 showed the page is mobile-heavy.- Read
metrics(LCP, INP and CLS with FCP and TTFB, each rated),regressions(a Core Web Vital whose rating band worsened between its two latest weeks) andlatestPeriod. - A
notConfiguredresponse with ahintmeans the Chrome UX Report connection is not set up in the app: say so and skip speed. - A
noDataresponse means the Chrome UX Report holds no record for this page: follow itsnextStep(the origin withouturl) and label that result as origin-level.
- Read
- GA4 engagement, when linked. Call
get_blended_landing_pageswithsiteUrl, the same dates,comparisonStartDate/comparisonEndDatefor the previous period,organicOnly: trueandlimit: 500, then find the row whosekeyequals the page's path (rows are keyed by normalized path, not full URL).- Read
sessions,activeUsers,bounceRate(a 0-1 fraction straight from GA4, so 0.62 is 62%),keyEvents,revenuewhen present,ga4Matchedand theprev*fields for the comparison. The tool'ssettledThroughmarks the Search Console side's settled boundary; keep both sides inside it. - Clicks far above sessions suggest a tracking gap or a redirect; sessions far above clicks mean the page draws traffic that is not Google organic.
- 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 instead), andno_propertymeans GA4 is connected but no GA4 property is linked to this site. Relay thehintand mark the engagement row "not linked". - If the page is not among the rows, say the tool lists the property's top landing pages by clicks and this page was not among them.
- Read
Output
Present the results in this order, with compact markdown tables for multi-row data and prose only for interpretation:
Page scorecard, one table with the tool and date range stated on the line above it:
Area Verdict Evidence Search ... clicks, impressions, CTR, position, trend shape (step 2) Indexing ... verdict, coverage, canonical pair (steps 5 and 6) On-page ... status, indexability, title and meta lengths, top issues (step 7) Speed ... LCP, INP, CLS ratings and regressions (step 8), or "not configured" Engagement ... sessions, bounce rate, key events (step 9), or "not linked" - Queries won and lost: a table (Query, Clicks, Impressions, CTR, Position, Verdict) with 5 to 10 rows, split into wins and losses.
- Markets and devices: a short table of the page's split next to the property's.
- Recommendations: end with a short prioritized list of 3 to 7 concrete recommendations, each naming its evidence (rewrite the title because CTR at position 4 is low on the two top queries; fix the canonical because Google selected another URL; address LCP on phones).
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 page's queries are also won by other pages, point the user to the cannibalization skill; when the page is one of many decaying pages, to content-decay; for a property-wide view, to site-audit.
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.

