indexing-tracker
Skill0 starsChanged 21 days agoMITView on GitHub
Set up and run the GSC Wizard Indexing Tracker for a defined set of URLs (new content, a migration batch, one section) using the GSC Wizard MCP tools: adds the URLs, inspects a first sample against the daily quota, reads back which are indexed and which are not with their verdicts and canonicals, and turns the tracker report into a status with re-check timing. Use when the user says "track indexing of these pages", "watch whether my new posts get indexed", "monitor the migration URLs", "add these URLs to the indexing tracker", "are the tracked pages indexed yet", or wants ongoing indexing monitoring rather than a one-off diagnosis.
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
- 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
- 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
6 rules. About 0 are common, 2 are distinctive, and 4 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.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 12
Resolve the property: If the user's request or the conversation names a property, use it.
- Distinctive: line 22
Add the URLs (write): Before calling anything, show the user:
- Very specific: line 31
when remaining is near zero, skip step 6, say the quota resets daily, and rely on steps 7 and 8.
- Very specific: line 45
Tracker report: Call get_indexing_tracker_report with siteUrl and days (default 30, max 90.
- Very specific: line 65
when to come back: new pages usually take days to a few weeks, and the tracker re-inspects each URL on its own schedule, so a status read …
- Distinctive: line 67
Keep prose for interpretation, not for restating numbers.
≈ “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
Indexing Tracker
Put a chosen set of URLs under continuous indexing monitoring and report where they stand. The output is the tracker status, the URLs still not indexed with their verdicts, and recommendations with a re-check plan. The user's request may contain a property, a list of URLs or a path prefix (for example /blog/), a sitemap URL, and an action hint ("add", "check", "status", "remove"). This skill sets up and monitors; when the user wants to know why pages are not indexed, run the indexing-health skill, which diagnoses by cause.
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. - Read the current tracker. Call
get_indexing_trackerwithsiteUrl.tracker: nullmeans no tracker exists yet;add_tracked_urlscreates one, so carry on. Otherwise readtracker.isActiveandstats(total,indexed,notIndexed,pending,errors,warnings,lastCheckAt), and compute the free capacity yourself as 1,800 minusstats.total, since a tracker holds at most 1,800 URLs per property.emptyBecauseon an existing tracker means it holds no URLs. - Build the URL set. Take it from whichever source the user has:
- The user's own list (a batch of new posts, the pages of a launch).
- A section or a sitemap: call
list_sitemapsto find the sitemap path, thenget_sitemap_performancewithsitemapUrlandmaxUrls(default 500, max 2000) and keep the URLs whose path matches the user's prefix; its rows also show which of them already receive impressions. - A migration batch: call
list_migration_redirectswithsiteUrlBset to the property (andlabelwhen the user names one;limitdefault 500, max 5000) and take each mapping'stoUrl, the new URL that has to get indexed. Every URL must be absolute and on the property's host, oradd_tracked_urlsrejects the whole batch. Deduplicate, drop URLs the tracker already holds (step 7 lists them), and trim to the free capacity, telling the user what was left out. Prefer the pages whose indexing matters (new content, migrated URLs, revenue pages) over bulk lists.
- Add the URLs (write). Before calling anything, show the user:
- the exact URLs and their count;
- the capacity they take out of the 1,800-URL cap;
- that the tracker's hourly run will inspect each of them on the property's inspection quota.
Then ask for confirmation and call
add_tracked_urlswithsiteUrlandurls(1 to 1,800). Read and reportadded,alreadyTracked,skippedOverCapandcapacityRemaining. New URLs start aspending. If the call is refused because the connection is read-only, say this step needs write access and continue with the read-only steps (2, 7 and 8).
- Check the inspection quota before any immediate check. Call
get_inspection_quotawithsiteUrland readcount,limitandremaining; the limit is 2,000 inspections per property per day, shared with the web app, andunavailable: truemeans the counter could not be read and the figures are placeholders, so treat the quota as unknown. Then plan:- at most 10 URLs per
check_tracked_url_nowcall, and only the URLs the user cares about most; - the whole workflow well under half of
remaining, since the hourly tracker run inspects the rest on its own; - when
remainingis near zero, skip step 6, say the quota resets daily, and rely on steps 7 and 8.
- at most 10 URLs per
- Inspect a first sample now (write, spends quota). For the URLs the user cares about most, up to 10, list them with the quota they will spend and ask the user to confirm (a read-only connection refuses this call), then call
check_tracked_url_nowwithsiteUrlandurls. It inspects five at a time at about 7 seconds each. InresultsreadcurrentStatus,previousStatus,verdict,coverageState,lastCrawlTime,googleCanonicalanduserCanonical. A brand-new URL that Google does not know yet is normal in its first days, not a failure. Rows that were not inspected say why:skipped: truewithskipReason: "recently_checked": inspected within the last five minutes, so the stored row came back and no quota was spent.skipped: truewithrate_limitedoraccess_denied: Google refused the property, the remaining URLs were left untouched, and astoppedblock (reason,message, andretryAfterSecondswhen Google sent one) says why; do not retry in this session.quotaExhausted: true: the daily limit was reached mid-call, andnotCheckednames the URLs not reached.error: "not tracked": the URL was never added, so add it first.
- Read the status of the whole set. Call
list_tracked_urlswithsiteUrl,filter(all,indexed,not_indexed,pending,errorsorwarnings; defaultall), optionallysearchwith the user's path prefix, andpageSizeup to 1000 (default 50;pageis one-based andtotalis the real count). Run it withnot_indexed, thenpending, and withwarningswhenstats.warningswas above zero.configured: falsemeans there is no tracker. Per URL readcurrentStatus,verdict,coverageState,lastCrawlTime,warningType,googleCanonical,userCanonicalandinspectionResultLink. Read eachcurrentStatusas follows:pending: added but not inspected yet, so nothing can be concluded.indexed(verdictPASS): fine; watchlastCrawlTimefor pages Google has not revisited in months.not_indexed: the check ran and Google does not index the page;coverageStatesays whether Google crawled it or only discovered it, and agoogleCanonicalthat differs fromuserCanonicalmeans Google indexes another URL in its place. Anullcanonical means Google did not report one, which is common for pages it has not indexed. For the cause and the fix, run the indexing-health skill.error: the check itself failed (counted instats.errors); re-check later rather than reading it as not indexed.
- Tracker report. Call
get_indexing_tracker_reportwithsiteUrlanddays(default 30, max 90; use a short window for a batch added recently). If every URL is stillpending,emptyBecausesays so; report that instead of a score of 0. Otherwise read:healthScore(0-100): half the indexed share, 30% fresh crawls, 20% warning-free share, with the parts inbreakdown.indexedPercent,freshCrawlPercent,warningFreePercent,totalTracked,warningCountandpendingCount.coverageBreakdown(URL counts per coverage state) andcrawlFreshness(buckets by last crawl age).lostPagesandnewlyIndexed(newest first, capped at 200), withlostPagesTotalandnewlyIndexedTotalas the full counts. A failed check counts as neither lost nor newly indexed.
- Prune when asked (write). When the user wants URLs dropped (retired pages, a finished batch, room for a new one), list the exact URLs, confirm, then call
remove_tracked_urlswithsiteUrlandurls; readrequestedandremoved. A removed URL stops being inspected; re-adding it starts it aspendingagain.
Output
Present, in this order:
- Tracker status: one line with whether the tracker existed or was created, the
statscounts,lastCheckAt, and the add result withcapacityRemaining. - Not indexed yet (
list_tracked_urlsplus the freshcheck_tracked_url_nowresults), as a compact markdown table of the top rows, typically 5 to 10, with the full count stated; group the rest bycoverageStatewith counts and listwarningTypeentries separately:
| URL | Status | Verdict | Coverage state | Google canonical | Last crawl |
- Movement:
healthScorewith its three components, and the newly indexed and lost pages from the report. - End with a short prioritized list of 3 to 5 concrete recommendations, then a re-check plan:
- which URLs to hand to
check_tracked_url_nownext and how much quota that needs; - when to come back: new pages usually take days to a few weeks, and the tracker re-inspects each URL on its own schedule, so a status read with
list_tracked_urlstomorrow costs no quota; - which URLs to retire with
remove_tracked_urlsonce they are indexed and stable, to free capacity for the next batch. Keep prose for interpretation, not for restating numbers. Do not fabricate rows the tools did not return.
- which URLs to hand to
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.

