sitemap-audit
Skill0 starsChanged 22 days agoMITView on GitHub
Audit sitemap health and coverage for a Search Console property with the GSC Wizard MCP tools: the submitted sitemaps with their errors, warnings and download dates (list_sitemaps), the join of one sitemap's URLs with Search Console metrics to find URLs that never show (get_sitemap_performance), stored inspection verdicts for those suspects without spending quota (list_url_inspections), the Bing side (get_bing_feeds), and, after confirmation, submitting or resubmitting published sitemaps (submit_sitemap). Use when the user asks "is my sitemap ok", "which sitemap URLs get no traffic", "sitemap errors", "resubmit my sitemap", "does Google read my sitemap", or about sitemap coverage.
3 other projects use a version of this.
Adopted by
Most recently taken up by
- nowork-studio/notfair-plugintheir own version, first seen Oct 14, 2026
- FlorianBruniaux/google-search-console-mcptheir own version, first seen Oct 10, 2026
- nowork-studio/topranktheir own version, first seen Oct 8, 2026
Other versions3 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 3
- nowork-studio/toprank★ 4.1ksame name
- nowork-studio/notfair-plugin★ 4.1ksame name
- 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
- page-deep-diveSkill
- portfolio-overviewSkill
- property-setupSkill
- query-deep-diveSkill
- quick-winsSkill
- ranking-changesSkill
- shopping-performanceSkill
- site-auditSkill
- site-migrationSkill
- traffic-dropSkill
- traffic-forecastSkill
- weekly-reportSkill
- yandex-performanceSkill
The file
We split this skill into the rules it gives an agent
6 rules. 0 are common, 2 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 3 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 14
Submitted sitemaps: Call list_sitemaps with siteUrl.
- Very specific: line 22
Read urlCount (URLs extracted), indexedInGscCount (URLs with impressions above 0) and range.
- Very specific: line 23
Read urls[], sorted by clicks then impressions, highest first, each with url, clicks, impressions, ctr (a 0-100 percentage, never multiply …
- Distinctive: line 39
Do not invent a verdict for a URL with no stored row.
- Very specific: line 41
Bing side: Call get_bing_feeds with siteUrl.
- Distinctive: line 46
Submit or resubmit (write, confirm first): Only when the user asks, or when step 2 found no sitemap or a pending or error-state one that …
“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Sitemap Audit
Check the sitemaps a property has submitted, measure how much of one sitemap Google actually shows in search, group the URLs that never show by their likely cause, and, when the user wants it, submit or resubmit a published sitemap. The user's request may contain a property, a sitemap URL, a section path, a date range, or "bing"; use it to skip resolution, pick the sitemap, or widen the engine side. For a diagnosis that spends inspection quota, hand over to the indexing-health skill.
Workflow
- Resolve the property. 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. Note the property'sgscScopefromlist_sites("full" or "readonly"): step 6 depends on it. For the Bing side,list_bing_sitesshows which sites Bing has verified (isVerifiedinsiteDetails) and answersnotConfigured: truewhen Bing Webmaster Tools is not connected. - Submitted sitemaps. Call
list_sitemapswithsiteUrl. Readsitemaps[], sorted bypath:lastSubmitted,lastDownloaded,isPending,isSitemapsIndex,type,warnings,errors, andcontents[]withtypeandsubmittedper content type.- Google has deprecated
contents[].indexedand it typically reads 0, so never present it as an indexed count or as evidence that nothing is indexed. - Flag
errorsabove 0 (Google could not parse part of the file) andwarningsabove 0 (usually URLs that redirect, 404 or are blocked). - Flag
isPendinglong afterlastSubmitted(Google has not fetched it yet) and alastDownloadedolder than the site's publishing cadence (a daily news sitemap downloaded two weeks ago is stale). - An empty list carries
emptyBecauseandnextStep; say Search Console lists no sitemap and offer step 6.
- Google has deprecated
- Coverage of the main sitemap. Pick the sitemap the user named, else the sitemap index or the one with the most submitted URLs. Call
get_sitemap_performancewithsiteUrl,sitemapUrl(it must be on the property host or a subdomain),maxUrls(default 500, max 2000) and, unless the user gave dates, nostartDateorendDateso the join covers the last 28 settled days.searchTypedefaults to web.- GSC data lags about 2 to 3 days: never treat the most recent 2 days as complete, and a URL published in the last few days with zero impressions is new, not broken.
- Read
urlCount(URLs extracted),indexedInGscCount(URLs with impressions above 0) andrange; compute the share yourself and say so. - Read
urls[], sorted by clicks then impressions, highest first, each withurl,clicks,impressions,ctr(a 0-100 percentage, never multiply it by 100) andposition(lower is better); zeros mean the page had no Search Console data. - Read
truncatedwithscanLimitandtruncationNote: on the live API the join pages through the property's top pages by clicks and may not reach every sitemap URL, so a zero is then unknown rather than "no impressions" andindexedInGscCountis a lower bound.dataSourcetells which path served the call; the warehouse reads the sitemap URLs directly, so its zeros are exact. - An index expands one level, up to 5 child sitemaps;
childSitemapNoteandfailedChildSitemapsname children that could not be read, so their URLs are missing.sitemapNotemeans a body exceeded the read cap.crawlNoteor an error about a blocked fetch means the server rejected the sitemap fetch; relay the whitelisting advice. Ifurlsis empty, follownextStep. - The suspects are the URLs with zero impressions over the range. For a very large sitemap, say the join was capped at
maxUrlsand audit child sitemaps one at a time.
- Group the suspects by likely cause without spending quota. First sort the suspect URLs by pattern: parameter or tracking URLs, pagination, tag and archive pages, http or trailing-slash variants of a canonical URL, media files, and URLs outside the property host all point at sitemap hygiene rather than indexing problems. Then call
list_url_inspectionswithsiteUrl,urlContainsset to a path segment the suspects share,latestPerUrl: trueandlimitup to 500, followingpagination.nextOffsetuntil the stored history is exhausted. Each row carriesurl,verdict,coverage_state,robots_txt_state,indexing_state,page_fetch_state,last_crawl_time,google_canonical,user_canonical,inspection_result_linkandrequested_at; all three canonical fields null means the row predates canonical storage. Map the suspects onto these groups, keeping the ones with no stored verdict in an "unknown, not yet inspected" group:
| Likely cause | Evidence | Fix |
| Not in the sitemap's remit (parameter, pagination, variant, non-canonical URL) | URL pattern; google_canonical differs from url | Regenerate the sitemap so it lists only canonical 200-status URLs |
| Discovered, never crawled | coverage_state says discovered, last_crawl_time null | Internal links to the page; fewer low-value URLs competing for crawl budget |
| Crawled, not indexed | coverage_state says crawled, verdict not passing | Strengthen or consolidate thin or duplicate content |
| Blocked or non-indexable | robots_txt_state blocked, or indexing_state reporting noindex | Fix the robots.txt rule or remove the noindex, or drop the URL from the sitemap if intentional |
| Fetch problem | page_fetch_state not successful (redirect, 404, server error) | Serve 200 at the listed URL, or list the final URL instead |
| Recently published | Zero impressions and a recent publish date the user confirms | Wait; recheck after the next sitemap download |
Do not invent a verdict for a URL with no stored row; the indexing-health skill inspects those within quota.
- Bing side. Call
get_bing_feedswithsiteUrl.notConfigured: true: say Bing Webmaster Tools is not connected for this property in the GSC Wizard app, relay thehint, and continue.- Otherwise read
feeds[], sorted by URL:url,status(Success, Pending, Warning or Error),type(Sitemap, RSS, Atom and so on),submitted,lastCrawledandurlCount. A date of 1601-01-01 is Bing's empty value, not a real date, andemptyBecausemeans Bing lists no feed at all. - Compare the two engines: a sitemap Google has and Bing lacks, or an Error status only on Bing, goes into the recommendations.
- Submit or resubmit (write, confirm first). Only when the user asks, or when step 2 found no sitemap or a pending or error-state one that the user wants refetched.
- Before calling, list the exact sitemap URLs and ask the user to confirm. Explain what the call does:
submit_sitemapregisters already-published sitemap URLs with Google (it never generates or hosts a file), queues a download, is idempotent, does not index anything, and Google reports warnings and errors only after it has downloaded the file, so a fresh submission normally comes back pending. - Each URL in
sitemapUrlsmust be absolute, on the property host or a subdomain, and already reachable; up to 20 per call. - Google refuses it when the connection's
gscScopeis readonly (the tool refuses before sending anything and its message names "Enable full access" on the Account page in the app), and a read-only connection refuses it too. In both cases say this step needs full access or a write access and continue with the read-only parts. - Read
submitted,failed,results[](sitemapUrl,accepted,confirmed,isPending,warnings,errors, orerrorfor a rejected one),notAttemptedwithstopReasonwhen a rate limit or permission refusal stopped the batch,messageandactions. Tell the user to re-checklist_sitemapsin a few hours for warnings and errors.
- Before calling, list the exact sitemap URLs and ask the user to confirm. Explain what the call does:
Output
Present the audit in this order, with compact markdown tables (top rows only, typically 5 to 10) and prose only for interpretation:
- Sitemap table (
list_sitemaps): Sitemap, Type, Index?, Last submitted, Last downloaded, Pending, Warnings, Errors, URLs submitted (fromcontents[].submitted). Never a column for indexed counts. - Coverage line (
get_sitemap_performance, with therange): URLs in the sitemap, URLs with impressions, the derived share, whether the join was truncated, and the top 5 URLs by clicks. - Suspects by likely cause: one row per group from step 4 with the URL count, two or three example URLs, and the fix; state how many suspects have no stored verdict.
- Bing (
get_bing_feeds): Feed, Type, Status, Submitted, Last crawled, URL count, or the not-configured note. - Submission result (
submit_sitemap, only if step 6 ran): per sitemap accepted, confirmed, pending, warnings and errors, plus anything innotAttempted.
End with a short prioritized list of 3 to 7 concrete recommendations (regenerate the sitemap without the hygiene groups, fix the fetch problems, resubmit after the fix, inspect the unknown group with the indexing-health skill and roughly how much quota that needs, submit the sitemap to Bing). Judge by the clicks and impressions at stake, not by URL counts alone. Do not fabricate rows the tools did not return; if a tool returns nothing, say so.
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.

