seo 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PRIVACY.md +2 -2
- package/README.md +133 -40
- package/TERMS.md +2 -2
- package/TRADEMARKS.md +9 -5
- package/dist/cli.js +68 -52
- package/dist/cli.js.map +1 -1
- package/dist/{dist-CSY2_p-j.js → dist-6bK_8r5M.js} +49 -49
- package/dist/dist-6bK_8r5M.js.map +1 -0
- package/dist/{dist-FeAUNn9A.js → dist-vRmqfhR4.js} +1 -1
- package/dist/index.d.ts +186 -94
- package/dist/index.js +843 -415
- package/dist/index.js.map +1 -1
- package/dist/mcp.d.ts +18 -1
- package/dist/mcp.js +6532 -4665
- package/dist/mcp.js.map +1 -1
- package/dist/{package-uzXzqDW6.js → package-7aT8_Xp0.js} +2 -2
- package/dist/{package-uzXzqDW6.js.map → package-7aT8_Xp0.js.map} +1 -1
- package/evals/README.md +117 -0
- package/evals/affected-urls.json +57 -0
- package/evals/ai-readiness.json +84 -0
- package/evals/ai-referrals.json +71 -0
- package/evals/ai-search-scorecard.json +70 -0
- package/evals/audit-page.json +57 -0
- package/evals/audit-urls.json +58 -0
- package/evals/cannibalisation.json +57 -0
- package/evals/community-intent.json +57 -0
- package/evals/compare-crawls.json +56 -0
- package/evals/content-optimization.json +57 -0
- package/evals/crawl-diff.json +58 -0
- package/evals/crawl-history.json +44 -0
- package/evals/crawl-report.json +44 -0
- package/evals/crawler-rules.json +44 -0
- package/evals/ctr-underperformers.json +57 -0
- package/evals/decaying-pages.json +57 -0
- package/evals/entity-readiness.json +57 -0
- package/evals/explain-crawl-issue.json +44 -0
- package/evals/generate-llms-txt.json +44 -0
- package/evals/geo-gaps.json +57 -0
- package/evals/index-coverage-plan.json +58 -0
- package/evals/index-coverage.json +70 -0
- package/evals/index-monitor.json +58 -0
- package/evals/index-watch.json +68 -0
- package/evals/internal-links.json +57 -0
- package/evals/link-recovery.json +58 -0
- package/evals/llms-txt-audit.json +44 -0
- package/evals/measure-change.json +58 -0
- package/evals/monthly-action-plan.json +56 -0
- package/evals/monthly-report.json +58 -0
- package/evals/narrative-report.json +58 -0
- package/evals/okf-build.json +44 -0
- package/evals/okf-validate.json +44 -0
- package/evals/page-opportunities.json +57 -0
- package/evals/performance-audit.json +57 -0
- package/evals/pseo-audit.json +84 -0
- package/evals/query-clusters.json +57 -0
- package/evals/quick-wins.json +86 -0
- package/evals/redirect-trace.json +57 -0
- package/evals/refresh-priorities.json +57 -0
- package/evals/search-performance-overview.json +86 -0
- package/evals/second-page.json +58 -0
- package/evals/segment-impact.json +57 -0
- package/evals/seo-fix-queue.json +85 -0
- package/evals/seo-geo-readiness.json +84 -0
- package/evals/seo-site-audit.json +85 -0
- package/evals/seo-to-ai-query.json +57 -0
- package/evals/seo.json +87 -0
- package/evals/setup-check.json +56 -0
- package/evals/site-crawl.json +44 -0
- package/evals/striking-distance.json +85 -0
- package/evals/technical-watch.json +57 -0
- package/evals/top-fixes.json +44 -0
- package/evals/traffic-anomaly.json +57 -0
- package/evals/update-correlation.json +57 -0
- package/evals/update-postmortem.json +57 -0
- package/package.json +5 -3
- package/skills/README.md +46 -59
- package/skills/seo/SKILL.md +88 -63
- package/skills/seo/agents/openai.yaml +2 -2
- package/dist/dist-CSY2_p-j.js.map +0 -1
- package/skills/affected-urls/SKILL.md +0 -39
- package/skills/affected-urls/agents/openai.yaml +0 -4
- package/skills/ai-readiness/SKILL.md +0 -34
- package/skills/ai-readiness/agents/openai.yaml +0 -4
- package/skills/ai-referrals/SKILL.md +0 -31
- package/skills/ai-referrals/agents/openai.yaml +0 -4
- package/skills/audit-page/SKILL.md +0 -50
- package/skills/audit-page/agents/openai.yaml +0 -4
- package/skills/audit-urls/SKILL.md +0 -39
- package/skills/audit-urls/agents/openai.yaml +0 -4
- package/skills/cannibalisation/SKILL.md +0 -31
- package/skills/cannibalisation/agents/openai.yaml +0 -4
- package/skills/community-intent/SKILL.md +0 -39
- package/skills/community-intent/agents/openai.yaml +0 -4
- package/skills/compare-crawls/SKILL.md +0 -40
- package/skills/compare-crawls/agents/openai.yaml +0 -4
- package/skills/content-optimization/SKILL.md +0 -31
- package/skills/content-optimization/agents/openai.yaml +0 -4
- package/skills/crawl-diff/SKILL.md +0 -51
- package/skills/crawl-diff/agents/openai.yaml +0 -4
- package/skills/crawl-history/SKILL.md +0 -37
- package/skills/crawl-history/agents/openai.yaml +0 -4
- package/skills/crawl-report/SKILL.md +0 -37
- package/skills/crawl-report/agents/openai.yaml +0 -4
- package/skills/crawler-rules/SKILL.md +0 -34
- package/skills/crawler-rules/agents/openai.yaml +0 -4
- package/skills/ctr-underperformers/SKILL.md +0 -31
- package/skills/ctr-underperformers/agents/openai.yaml +0 -4
- package/skills/decaying-pages/SKILL.md +0 -31
- package/skills/decaying-pages/agents/openai.yaml +0 -4
- package/skills/entity-readiness/SKILL.md +0 -34
- package/skills/entity-readiness/agents/openai.yaml +0 -4
- package/skills/explain-crawl-issue/SKILL.md +0 -32
- package/skills/explain-crawl-issue/agents/openai.yaml +0 -4
- package/skills/generate-llms-txt/SKILL.md +0 -37
- package/skills/generate-llms-txt/agents/openai.yaml +0 -4
- package/skills/geo-gaps/SKILL.md +0 -37
- package/skills/geo-gaps/agents/openai.yaml +0 -4
- package/skills/index-coverage/SKILL.md +0 -84
- package/skills/index-coverage/agents/openai.yaml +0 -4
- package/skills/index-coverage-plan/SKILL.md +0 -50
- package/skills/index-coverage-plan/agents/openai.yaml +0 -4
- package/skills/index-monitor/SKILL.md +0 -49
- package/skills/index-monitor/agents/openai.yaml +0 -4
- package/skills/index-watch/SKILL.md +0 -77
- package/skills/index-watch/agents/openai.yaml +0 -4
- package/skills/internal-links/SKILL.md +0 -31
- package/skills/internal-links/agents/openai.yaml +0 -4
- package/skills/link-recovery/SKILL.md +0 -51
- package/skills/link-recovery/agents/openai.yaml +0 -4
- package/skills/llms-txt-audit/SKILL.md +0 -34
- package/skills/llms-txt-audit/agents/openai.yaml +0 -4
- package/skills/measure-change/SKILL.md +0 -52
- package/skills/measure-change/agents/openai.yaml +0 -4
- package/skills/monthly-action-plan/SKILL.md +0 -50
- package/skills/monthly-action-plan/agents/openai.yaml +0 -4
- package/skills/monthly-report/SKILL.md +0 -50
- package/skills/monthly-report/agents/openai.yaml +0 -4
- package/skills/narrative-report/SKILL.md +0 -51
- package/skills/narrative-report/agents/openai.yaml +0 -4
- package/skills/okf-build/SKILL.md +0 -39
- package/skills/okf-build/agents/openai.yaml +0 -4
- package/skills/okf-validate/SKILL.md +0 -43
- package/skills/okf-validate/agents/openai.yaml +0 -4
- package/skills/page-opportunities/SKILL.md +0 -31
- package/skills/page-opportunities/agents/openai.yaml +0 -4
- package/skills/performance/SKILL.md +0 -50
- package/skills/performance/agents/openai.yaml +0 -4
- package/skills/performance-audit/SKILL.md +0 -31
- package/skills/performance-audit/agents/openai.yaml +0 -4
- package/skills/pseo-audit/SKILL.md +0 -103
- package/skills/pseo-audit/agents/openai.yaml +0 -4
- package/skills/query-clusters/SKILL.md +0 -31
- package/skills/query-clusters/agents/openai.yaml +0 -4
- package/skills/quick-wins/SKILL.md +0 -31
- package/skills/quick-wins/agents/openai.yaml +0 -4
- package/skills/redirect-trace/SKILL.md +0 -51
- package/skills/redirect-trace/agents/openai.yaml +0 -4
- package/skills/refresh-priorities/SKILL.md +0 -48
- package/skills/refresh-priorities/agents/openai.yaml +0 -4
- package/skills/search-performance-overview/SKILL.md +0 -48
- package/skills/search-performance-overview/agents/openai.yaml +0 -4
- package/skills/second-page/SKILL.md +0 -50
- package/skills/second-page/agents/openai.yaml +0 -4
- package/skills/segment-impact/SKILL.md +0 -50
- package/skills/segment-impact/agents/openai.yaml +0 -4
- package/skills/seo-fix-queue/SKILL.md +0 -50
- package/skills/seo-fix-queue/agents/openai.yaml +0 -4
- package/skills/seo-geo-readiness/SKILL.md +0 -60
- package/skills/seo-geo-readiness/agents/openai.yaml +0 -4
- package/skills/seo-site-audit/SKILL.md +0 -59
- package/skills/seo-site-audit/agents/openai.yaml +0 -4
- package/skills/seo-to-ai-query/SKILL.md +0 -31
- package/skills/seo-to-ai-query/agents/openai.yaml +0 -4
- package/skills/setup-check/SKILL.md +0 -49
- package/skills/setup-check/agents/openai.yaml +0 -4
- package/skills/site-crawl/SKILL.md +0 -39
- package/skills/site-crawl/agents/openai.yaml +0 -4
- package/skills/striking-distance/SKILL.md +0 -52
- package/skills/striking-distance/agents/openai.yaml +0 -4
- package/skills/technical-watch/SKILL.md +0 -49
- package/skills/technical-watch/agents/openai.yaml +0 -4
- package/skills/top-fixes/SKILL.md +0 -38
- package/skills/top-fixes/agents/openai.yaml +0 -4
- package/skills/traffic-anomaly/SKILL.md +0 -52
- package/skills/traffic-anomaly/agents/openai.yaml +0 -4
- package/skills/update-correlation/SKILL.md +0 -51
- package/skills/update-correlation/agents/openai.yaml +0 -4
- package/skills/update-postmortem/SKILL.md +0 -49
- package/skills/update-postmortem/agents/openai.yaml +0 -4
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: decaying-pages
|
|
3
|
-
description: Compare retained GSC query-page rows across equal finalized windows to find observed click declines; use when an agent needs a bounded investigation queue without invented attribution.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Decaying queries and pages
|
|
7
|
-
|
|
8
|
-
Use this report to identify retained query/page combinations that lost clicks between adjacent equal-length periods or year-over-year windows. It requires evidence in both windows, excludes URL shifts, and groups returned rows by diagnosis signal and page template. This avoids turning a row missing from GSC's retained query data into zero traffic. The report shows observed movement, not why it happened.
|
|
9
|
-
|
|
10
|
-
## Run the report
|
|
11
|
-
|
|
12
|
-
Use the compact MCP flow:
|
|
13
|
-
|
|
14
|
-
1. Call `seo_list_reports` with `{"category":"opportunities"}`.
|
|
15
|
-
2. Call `seo_describe_report` with `{"id":"decaying-pages"}`.
|
|
16
|
-
3. Call `seo_run_report` with `{"id":"decaying-pages","params":{"site":"sc-domain:example.com","days":28,"comparison":"previous-period","limit":20,"minDropPct":20,"minPreviousClicks":10,"minClickLoss":5}}`.
|
|
17
|
-
|
|
18
|
-
The CLI uses the same report definition:
|
|
19
|
-
|
|
20
|
-
```sh
|
|
21
|
-
seo reports describe decaying-pages --json
|
|
22
|
-
seo reports run decaying-pages --params '{"site":"sc-domain:example.com","days":28,"comparison":"previous-period","limit":20,"minDropPct":20,"minPreviousClicks":10,"minClickLoss":5}' --json
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
`site` is required. Choose `year-over-year` only when the requested window fits GSC's available history. Brand terms and `includeBrand` control navigational-query filtering.
|
|
26
|
-
|
|
27
|
-
## Interpret and act
|
|
28
|
-
|
|
29
|
-
Read `dataStatus`, `ranges`, and `source.completeness` first. Check current and previous fetched rows, caps, truncation, invalid rows, excluded URL shifts, and output limits in `selection`. `summary.observedRetainedQueryClickLoss` covers eligible retained rows; `returnedObservedRetainedQueryClickLoss` covers only the bounded output. Each item preserves current and previous clicks, impressions, CTR, position, `clickLoss`, `dropPct`, signals, and an evidence scope of `retained-query-page-row`. A diagnosis such as `lost_position` or `lost_ctr` labels correlated movement, not a cause.
|
|
30
|
-
|
|
31
|
-
Safe actions include checking deployments and annotations, live indexability, SERP composition, demand seasonality, and page-template patterns before editing. Use groups to find repeated technical or content hypotheses, then verify individual URLs. Do not sum capped rows into a property-wide loss, treat missing retained rows as zero, or claim that a content change, ranking update, or technical issue caused the decline without separate evidence.
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: entity-readiness
|
|
3
|
-
description: Inventory entity-related markup and identity signals without claiming recognition or authority. Use when reviewing schema types, names, authors, dates, sameAs links, and social references across crawlable pages.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Review entity readiness
|
|
7
|
-
|
|
8
|
-
Consistent names, authorship, structured data, and external identity references can make a site easier to interpret. This report measures those observable signals across evaluated pages. It does not score authority, validate ownership of linked profiles, or prove that any search or AI system recognizes an entity.
|
|
9
|
-
|
|
10
|
-
## Run it
|
|
11
|
-
|
|
12
|
-
For MCP, discover the report with `seo_list_reports` category `crawl` only when necessary. Call `seo_describe_report` with `{ "id": "entity-readiness" }`, then `seo_run_report` with:
|
|
13
|
-
|
|
14
|
-
```json
|
|
15
|
-
{
|
|
16
|
-
"id": "entity-readiness",
|
|
17
|
-
"params": { "reportId": "crawl_example_20260710" }
|
|
18
|
-
}
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
Use `structuredContent` after confirming `isError` is false. CLI parity is:
|
|
22
|
-
|
|
23
|
-
```sh
|
|
24
|
-
seo reports describe entity-readiness --json
|
|
25
|
-
seo reports run entity-readiness --params '{"reportId":"crawl_example_20260710"}' --json
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Pass `url` only when a fresh crawl is intended. A saved report keeps this inventory aligned with other technical findings.
|
|
29
|
-
|
|
30
|
-
## Read the observations
|
|
31
|
-
|
|
32
|
-
Check `dataStatus`, `evaluatedPages`, `crawlPages`, and caveats before interpreting coverage. The analysis evaluates eligible, successfully fetched pages; skipped or non-indexable pages are not evidence of absence. Checks are informational observations with counts and coverage, not pass/fail requirements.
|
|
33
|
-
|
|
34
|
-
Use `entities.schemaTypes` to see which types were parsed, `sameAsByType` and `sameAs` to review identity references, `socialProfiles` to inspect linked profiles, and `authors` to find observed bylines or structured authors. Sample the source pages before recommending global markup changes: a product, article, person, and organization need different semantics. Fix malformed or inconsistent markup only when the page's real subject supports it. Confirm names, URLs, authorship, and dates with the publisher, then re-crawl the same scope. Never infer Knowledge Graph inclusion, ownership, expertise, rankings, visibility, or citations from these signals alone.
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: explain-crawl-issue
|
|
3
|
-
description: Translate one crawler rule id into technical meaning, remediation guidance, and a verification method. Use after a crawl identifies a rule and before turning it into implementation work.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Explain a crawler rule
|
|
7
|
-
|
|
8
|
-
Crawler findings use stable rule ids so agents can join summaries, affected URLs, and guidance without parsing prose. This report explains the rule definition; it does not inspect a site or prove that the rule triggered on any particular page.
|
|
9
|
-
|
|
10
|
-
## Run it
|
|
11
|
-
|
|
12
|
-
If the id is unknown, use `crawler-rules` first. For MCP report discovery, call `seo_list_reports` with category `crawl` only when needed. Then call `seo_describe_report` with `{ "id": "explain-crawl-issue" }` and `seo_run_report` with:
|
|
13
|
-
|
|
14
|
-
```json
|
|
15
|
-
{
|
|
16
|
-
"id": "explain-crawl-issue",
|
|
17
|
-
"params": { "ruleId": "missing_title" }
|
|
18
|
-
}
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
Check MCP `isError`, then read `structuredContent`. The exact CLI equivalent is:
|
|
22
|
-
|
|
23
|
-
```sh
|
|
24
|
-
seo reports describe explain-crawl-issue --json
|
|
25
|
-
seo reports run explain-crawl-issue --params '{"ruleId":"missing_title"}' --json
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Apply the guidance carefully
|
|
29
|
-
|
|
30
|
-
Read the rule's category, default severity, why it matters, fix steps, ignored impact, verification method, and agent hints. Default severity is generic prioritization metadata; actual urgency depends on affected templates, page purpose, response state, demand evidence, and publisher intent. Guidance describes the condition checked by the crawler, not a search-engine penalty or guaranteed ranking effect.
|
|
31
|
-
|
|
32
|
-
Pair the definition with `affected-urls` from the same saved crawl. Inspect the per-URL evidence and sample enough page types to find the implementation boundary. For `missing_title`, for example, confirm that the final HTML truly lacks a useful title and that the crawler did not receive an error or intermediate response before changing a template. Create the smallest shared fix, preserve intentional controls, and use the stated verification method on the same bounded URLs. If no affected-URL evidence exists, present the output as reference documentation only.
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: generate-llms-txt
|
|
3
|
-
description: Generate a bounded llms.txt draft from eligible crawl pages while exposing its URL and token budgets. Use when an agent needs a reviewable starting point rather than an automatically publishable file.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Generate an llms.txt draft
|
|
7
|
-
|
|
8
|
-
This report turns crawl evidence into concise agent-facing navigation. It selects successfully fetched, indexable pages, removes common utility paths, groups suitable URLs, and stops at explicit URL and token budgets. The output is a draft: the crawler cannot determine publisher intent or guarantee factual summaries.
|
|
9
|
-
|
|
10
|
-
## Run it
|
|
11
|
-
|
|
12
|
-
For MCP, call `seo_list_reports` with category `crawl` only if discovery is needed. Call `seo_describe_report` with `{ "id": "generate-llms-txt" }`, then call `seo_run_report` with:
|
|
13
|
-
|
|
14
|
-
```json
|
|
15
|
-
{
|
|
16
|
-
"id": "generate-llms-txt",
|
|
17
|
-
"params": {
|
|
18
|
-
"reportId": "crawl_example_20260710",
|
|
19
|
-
"maxUrls": 50,
|
|
20
|
-
"tokenBudget": 4000,
|
|
21
|
-
"exclude": ["/account/*", "/search"]
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
Check `isError` and consume `structuredContent`. CLI parity is:
|
|
27
|
-
|
|
28
|
-
```sh
|
|
29
|
-
seo reports describe generate-llms-txt --json
|
|
30
|
-
seo reports run generate-llms-txt --params '{"reportId":"crawl_example_20260710","maxUrls":50,"tokenBudget":4000,"exclude":["/account/*","/search"]}' --json
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
## Review before publishing
|
|
34
|
-
|
|
35
|
-
Inspect `content`, `includedUrls`, `estimatedTokens`, and `sections`. Confirm every URL is canonical, public, current, useful to an agent, and safe to promote. Review generated titles and descriptions against the pages themselves. Use exclusions for private, transactional, faceted, search, or low-value routes, and keep the file deliberately small.
|
|
36
|
-
|
|
37
|
-
Load the source with `crawl-report` to check its date, page cap, failures, and caveats. The generator currently does not return a separate candidate count, omitted count, source metadata block, or explicit truncation flag. Reaching `maxUrls` or the token budget should therefore be treated as possible truncation, not a complete inventory. A technically valid draft does not prove search or AI benefit, selection, indexing, visibility, or citations. Publish only after human review, then fetch the final file and validate its links.
|
package/skills/geo-gaps/SKILL.md
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: geo-gaps
|
|
3
|
-
description: Find URL-level technical barriers to AI-search eligibility while keeping access and selection separate. Use when reviewing response, crawl, indexability, canonical, or snippet restrictions from a crawl.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Find AI-search eligibility gaps
|
|
7
|
-
|
|
8
|
-
Content cannot be selected when a system cannot retrieve or use it, but technical access never guarantees selection. This report narrows crawl evidence to response failures, robots restrictions, non-indexing directives, canonicalized pages, and snippet controls. It is a diagnostic URL list, not a visibility score.
|
|
9
|
-
|
|
10
|
-
## Run it
|
|
11
|
-
|
|
12
|
-
For MCP, call `seo_list_reports` with category `crawl` only if discovery is required. Call `seo_describe_report` with `{ "id": "geo-gaps" }`, then call `seo_run_report` with:
|
|
13
|
-
|
|
14
|
-
```json
|
|
15
|
-
{
|
|
16
|
-
"id": "geo-gaps",
|
|
17
|
-
"params": {
|
|
18
|
-
"reportId": "crawl_example_20260710",
|
|
19
|
-
"limit": 25
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
Confirm `isError` is false and consume `structuredContent`. The CLI flow is:
|
|
25
|
-
|
|
26
|
-
```sh
|
|
27
|
-
seo reports describe geo-gaps --json
|
|
28
|
-
seo reports run geo-gaps --params '{"reportId":"crawl_example_20260710","limit":25}' --json
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Interpret each gap
|
|
32
|
-
|
|
33
|
-
For every URL, separate `issues` from `searchEligibility`. Review successful HTML response, crawl permission, indexable-candidate status, declared and effective indexability, canonical evidence, and snippet eligibility. A `null` access state means unknown, not allowed. Semantic HTML, structured data, authorship, dates, question headings, and answerable blocks are observations; they do not override a hard access restriction or create eligibility by themselves.
|
|
34
|
-
|
|
35
|
-
Read `dataStatus`, `source`, and `selection` before interpreting the URL list. `source.partialReasons` explains missing page or request evidence, an incomplete crawl, page-cap stops, skipped URLs, failed requests, and extraction failures. Keep `configuredMaxPages`, `pageLimitReached`, request evidence status, and the evaluated, matched, returned, and truncated page counts with any conclusion. Propagated `warnings` and `caveats` remain part of the result.
|
|
36
|
-
|
|
37
|
-
Confirm intent before treating `noindex`, robots rules, canonicals, or snippet limits as defects. Fix unintended response and access conflicts first, then verify the exact URL and directive after deployment. A `complete` result describes only the pages evaluated by that crawl, while `partial` or `unavailable` evidence cannot support an all-clear. An empty or short gap list does not prove indexing, visibility, selection, citation, or complete site coverage.
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: index-coverage
|
|
3
|
-
description: Compare a saved crawl and sitemap with Google Search Console page results, then choose representative URLs for URL Inspection. Use when an agent needs to investigate index coverage or decide where limited URL Inspection checks will answer the most useful questions without treating a missing Search Analytics row as proof that a page is unindexed.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Investigate index coverage signals
|
|
7
|
-
|
|
8
|
-
Use `index-coverage` when the question is "which pages should I inspect?" A
|
|
9
|
-
site can expose a page through links, a crawl, or a sitemap while Search
|
|
10
|
-
Console returns no page row for the chosen period. That mismatch deserves
|
|
11
|
-
review. It does not prove that the page is unindexed.
|
|
12
|
-
|
|
13
|
-
The report compares three different kinds of evidence:
|
|
14
|
-
|
|
15
|
-
- A saved crawl shows which pages the local crawler fetched and which current
|
|
16
|
-
controls it observed.
|
|
17
|
-
- Sitemaps show URLs submitted as discovery hints. They do not prove crawling
|
|
18
|
-
or indexing.
|
|
19
|
-
- Search Analytics page rows show Google Search visibility returned during an
|
|
20
|
-
exact finalized date range. They are not a complete index inventory.
|
|
21
|
-
|
|
22
|
-
Use URL Inspection after this report when you need Google's current indexed
|
|
23
|
-
verdict for a representative URL.
|
|
24
|
-
|
|
25
|
-
## Run the report
|
|
26
|
-
|
|
27
|
-
With MCP, call `seo_list_reports` with `{"category":"monitoring"}`. Call
|
|
28
|
-
`seo_describe_report` with `{"id":"index-coverage"}`, then call
|
|
29
|
-
`seo_run_report`, for example:
|
|
30
|
-
|
|
31
|
-
```json
|
|
32
|
-
{"id":"index-coverage","params":{"site":"sc-domain:example.com","sitemaps":["https://example.com/sitemap.xml"],"days":90,"rowLimit":100000}}
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
The report uses the latest saved crawl for `site` unless `crawlReportId` names
|
|
36
|
-
one explicitly. Run `site-crawl` first when no suitable local crawl exists.
|
|
37
|
-
Pass `sitemaps` when the crawl did not capture useful robots.txt sitemap
|
|
38
|
-
declarations or when you need a specific sitemap scope.
|
|
39
|
-
|
|
40
|
-
The CLI uses the same schema and report logic:
|
|
41
|
-
|
|
42
|
-
```sh
|
|
43
|
-
seo reports describe index-coverage --json
|
|
44
|
-
seo reports run index-coverage --params '{"site":"sc-domain:example.com","sitemaps":["https://example.com/sitemap.xml"],"days":90,"rowLimit":100000}' --json
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## Read the evidence before the URL lists
|
|
48
|
-
|
|
49
|
-
Start with `sources`. Check `completeness`, `rowLimit`, `rowLimitReached`,
|
|
50
|
-
invalid URLs, duplicate URLs, the Search Console date range, and invalid
|
|
51
|
-
metric rows. A partial or truncated source makes absence comparisons less
|
|
52
|
-
reliable.
|
|
53
|
-
|
|
54
|
-
Then inspect these groups:
|
|
55
|
-
|
|
56
|
-
- `retainedSearchVisibility` contains pages with Search Analytics
|
|
57
|
-
impressions in the selected period.
|
|
58
|
-
- `crawlableWithoutRetainedSearchVisibility` contains fetched crawlable pages
|
|
59
|
-
with no returned Search Console row. Treat these as review candidates.
|
|
60
|
-
- `blockedOrNonIndexable` keeps current crawl controls and historical search
|
|
61
|
-
visibility separate. A control can be intentional.
|
|
62
|
-
- `sitemapOnly` and `searchConsoleOnly` show mismatches in the available source
|
|
63
|
-
inventories. Scope, redirects, URL variants, and source limits may explain
|
|
64
|
-
them.
|
|
65
|
-
- `templateReview` groups repeated URL shapes for sampling. A cluster is not a
|
|
66
|
-
content-quality, duplication, or index-bloat verdict.
|
|
67
|
-
|
|
68
|
-
Every detail list is limited. Use `count`, `returned`, and `omitted` together
|
|
69
|
-
before describing the size of a group.
|
|
70
|
-
|
|
71
|
-
## Choose useful follow-up checks
|
|
72
|
-
|
|
73
|
-
Pick representative URLs from important templates, high-value site sections,
|
|
74
|
-
and unexpected sitemap-only groups. Prefer a small sample that tests different
|
|
75
|
-
failure theories over a long random list.
|
|
76
|
-
|
|
77
|
-
Run `index-watch` for those URLs to collect exact URL Inspection evidence. Use
|
|
78
|
-
`index-coverage-plan` when the inventory is too large for the available daily
|
|
79
|
-
quota. Fix crawl or sitemap scope problems before drawing conclusions from
|
|
80
|
-
cross-source mismatches.
|
|
81
|
-
|
|
82
|
-
Never call a URL indexed because it had Search Analytics visibility during the
|
|
83
|
-
period. Never call it unindexed because no row appeared. Do not turn a limited
|
|
84
|
-
or incomplete source into a whole-site index coverage percentage.
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
interface:
|
|
2
|
-
display_name: "Index coverage signals"
|
|
3
|
-
short_description: "Choose pages for URL Inspection from crawl and search evidence"
|
|
4
|
-
default_prompt: "Use $index-coverage to compare crawl, sitemap, and Search Console evidence, then choose representative URLs for URL Inspection."
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: index-coverage-plan
|
|
3
|
-
description: Allocate sitemap URLs across available GSC properties under URL Inspection capacity; use it to design a monitoring cycle before spending inspection quota.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Plan inspection coverage
|
|
7
|
-
|
|
8
|
-
Use `index-coverage-plan` when sitemap inventory is larger than the URL
|
|
9
|
-
Inspection checks you can run each day. It fetches sitemap URLs, maps them to
|
|
10
|
-
the most specific available Search Console properties, estimates cycle time,
|
|
11
|
-
and can suggest URL-prefix properties for large folders. It does not call URL
|
|
12
|
-
Inspection and does not report whether any URL is indexed.
|
|
13
|
-
|
|
14
|
-
## Run the report
|
|
15
|
-
|
|
16
|
-
With MCP, call `seo_list_reports` with `{"category":"monitoring"}`. Call
|
|
17
|
-
`seo_describe_report` with `{"id":"index-coverage-plan"}`, then call
|
|
18
|
-
`seo_run_report`, for example
|
|
19
|
-
`{"id":"index-coverage-plan","params":{"site":"sc-domain:example.com","sitemaps":["https://example.com/sitemap.xml"],"dailyLimit":200,"targetCycleDays":7,"maxUrls":50000}}`.
|
|
20
|
-
|
|
21
|
-
The CLI uses the same report schema:
|
|
22
|
-
|
|
23
|
-
```sh
|
|
24
|
-
seo reports describe index-coverage-plan --json
|
|
25
|
-
seo reports run index-coverage-plan --params '{"site":"sc-domain:example.com","sitemaps":["https://example.com/sitemap.xml"],"dailyLimit":200,"targetCycleDays":7,"maxUrls":50000}' --json
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Pass `properties` only when you intentionally want to override discovered GSC
|
|
29
|
-
properties. Every sitemap URL must belong to the root property.
|
|
30
|
-
|
|
31
|
-
## Interpret the output
|
|
32
|
-
|
|
33
|
-
Read `summary.sitemapUrls`, `urlCount`, property count, daily capacity,
|
|
34
|
-
estimated cycle days, target cycle days, and suggestion count together.
|
|
35
|
-
`properties` shows each allocation, daily limit, estimated cycle, and sample
|
|
36
|
-
URLs. `suggestions` identifies folders that might benefit from a separate
|
|
37
|
-
URL-prefix property and explains the calculated reason.
|
|
38
|
-
|
|
39
|
-
Inspect every `warning`. Sitemap fetch failures, invalid or out-of-property
|
|
40
|
-
URLs, nested-sitemap boundaries, deduplication, or `maxUrls` truncation make the
|
|
41
|
-
plan incomplete. Estimated cycle time is arithmetic based on discovered URLs
|
|
42
|
-
and configured capacity; it is not a promise that Google will process or index
|
|
43
|
-
those URLs.
|
|
44
|
-
|
|
45
|
-
## Act safely
|
|
46
|
-
|
|
47
|
-
Use the plan to set a realistic recurring `index-monitor` limit. Add a suggested
|
|
48
|
-
property only if you control it and the operational benefit is worth the setup.
|
|
49
|
-
Fix sitemap discovery problems before increasing quota. Do not report an index
|
|
50
|
-
coverage percentage, excluded count, or all-clear from this allocation plan.
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: index-monitor
|
|
3
|
-
description: Select due sitemap URLs and store bounded Google URL Inspection snapshots; use it for recurring index-state monitoring under local quota controls.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Monitor sitemap URLs
|
|
7
|
-
|
|
8
|
-
Use `index-monitor` for a recurring, quota-aware sample of sitemap URLs. It
|
|
9
|
-
builds a bounded inventory, allocates URLs to the most specific GSC property,
|
|
10
|
-
selects due checks, calls URL Inspection, and stores snapshots for later change
|
|
11
|
-
classification. The result describes Google's indexed snapshot for selected
|
|
12
|
-
URLs. It is not a live crawl and cannot establish the status of every sitemap
|
|
13
|
-
URL in one run.
|
|
14
|
-
|
|
15
|
-
## Run the report
|
|
16
|
-
|
|
17
|
-
With MCP, call `seo_list_reports` with `{"category":"monitoring"}`, then
|
|
18
|
-
`seo_describe_report` with `{"id":"index-monitor"}`. Call `seo_run_report` with
|
|
19
|
-
schema-valid parameters, for example
|
|
20
|
-
`{"id":"index-monitor","params":{"site":"sc-domain:example.com","sitemaps":["https://example.com/sitemap.xml"],"dailyLimit":200,"inspectLimit":25,"maxUrls":50000,"languageCode":"en-GB"}}`.
|
|
21
|
-
|
|
22
|
-
CLI parity uses the same registry:
|
|
23
|
-
|
|
24
|
-
```sh
|
|
25
|
-
seo reports describe index-monitor --json
|
|
26
|
-
seo reports run index-monitor --params '{"site":"sc-domain:example.com","sitemaps":["https://example.com/sitemap.xml"],"dailyLimit":200,"inspectLimit":25,"maxUrls":50000,"languageCode":"en-GB"}' --json
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## Interpret the output
|
|
30
|
-
|
|
31
|
-
Read `dataStatus` and `source` first. Check sitemap and inventory limits,
|
|
32
|
-
discovered and invalid URLs, truncation flags, omitted minimum count, daily
|
|
33
|
-
limit, inspection limit, freshness window, and retry interval.
|
|
34
|
-
|
|
35
|
-
In `summary`, keep inventory states distinct: never attempted, never succeeded,
|
|
36
|
-
retry waiting, fresh, stale, due, selected, unselected due, attempted,
|
|
37
|
-
inspected, failed, quota blocked, deferred, and skipped. A due URL that was not
|
|
38
|
-
selected has no new inspection result. `properties` explains allocation and
|
|
39
|
-
execution per property. In `items`, separate `inspectionStatus`, `indexStatus`,
|
|
40
|
-
current issue codes, regressions, recoveries, alerts, and operational errors.
|
|
41
|
-
Read `caveats` and `warnings` before an all-clear.
|
|
42
|
-
|
|
43
|
-
## Act safely
|
|
44
|
-
|
|
45
|
-
Investigate regressions and current issues with a live page audit, sitemap
|
|
46
|
-
review, and the exact inspection evidence. Retry failed, deferred, or
|
|
47
|
-
quota-blocked checks according to `retryAt`; do not convert them into SEO
|
|
48
|
-
defects. Increase cycle coverage gradually. A complete selected batch still
|
|
49
|
-
does not prove inventory-wide indexing, recrawl timing, or future inclusion.
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: index-watch
|
|
3
|
-
description: Monitor a bounded URL set with Google Search Console URL Inspection and interpret exact indexed-state evidence, current reviews, regressions, recoveries, failures, and quota-deferred checks. Use when an agent needs to check whether watched URLs changed indexing state, investigate exact robots/indexing/fetch/canonical evidence, or plan recurring sitemap monitoring without overstating URL Inspection as a live test.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Index watch
|
|
7
|
-
|
|
8
|
-
Call `seo_list_reports` with category `monitoring` when discovery is needed.
|
|
9
|
-
Call `seo_describe_report` with id `index-watch`, then call `seo_run_report`
|
|
10
|
-
with that id and only the described parameters. Read `structuredContent` as the
|
|
11
|
-
machine contract. Use report id `index-monitor` for a bounded oldest-first
|
|
12
|
-
sitemap sample. Use report id `index-coverage-plan` before monitoring a large
|
|
13
|
-
inventory across multiple Search Console properties.
|
|
14
|
-
|
|
15
|
-
For the shared schema-backed CLI path:
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
seo reports describe index-watch --json
|
|
19
|
-
seo reports run index-watch --params '{"site":"sc-domain:example.com","urls":["https://example.com/a","https://example.com/b"],"dailyLimit":25}' --json
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
This validates the same parameters used by MCP. The focused commands below add
|
|
23
|
-
saved monitoring state, sitemap selection, and friendlier flags for recurring
|
|
24
|
-
human workflows.
|
|
25
|
-
|
|
26
|
-
## Run the report
|
|
27
|
-
|
|
28
|
-
1. Pass the selected Search Console property as `site`.
|
|
29
|
-
2. Keep explicit `urls` at 100 or fewer. Every URL must belong to the property.
|
|
30
|
-
3. Use `dailyLimit` only to set a lower local safety limit. It cannot exceed
|
|
31
|
-
Google's documented 2,000 daily inspections per property.
|
|
32
|
-
4. For sitemap monitoring, check `source.possiblyTruncated`, `dataStatus`,
|
|
33
|
-
`warnings`, `neverAttempted`, `neverSucceeded`, `retryWaiting`, `fresh`,
|
|
34
|
-
`stale`, `due`, `selected`, and `unselectedDue` before summarising coverage.
|
|
35
|
-
5. Read `currentIssues`, `regressions`, `recoveries`, `failed`, `quotaBlocked`,
|
|
36
|
-
and `deferred` separately.
|
|
37
|
-
|
|
38
|
-
CLI equivalents:
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
seo index-watch --site sc-domain:example.com --urls https://example.com/a,https://example.com/b --json
|
|
42
|
-
seo index-watch --site sc-domain:example.com --sitemaps https://example.com/sitemap.xml --inspect-limit 25 --json
|
|
43
|
-
seo index-watch --site sc-domain:example.com --sitemaps https://example.com/sitemap.xml --plan --json
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
## Interpret evidence
|
|
47
|
-
|
|
48
|
-
- `inspectionStatus: succeeded` means Google returned an indexed snapshot.
|
|
49
|
-
- `indexStatus` maps exact verdicts: `PASS` to `indexed`, `NEUTRAL` to
|
|
50
|
-
`excluded`, `FAIL` to `invalid`, and everything else to `unknown`.
|
|
51
|
-
- `currentIssue` means stable enum or canonical evidence needs review against
|
|
52
|
-
the URL's intended state. An excluded URL or alternate canonical may be
|
|
53
|
-
intentional.
|
|
54
|
-
- `changeKind: regression` means a prior clear successful snapshot became an
|
|
55
|
-
issue. `recovery` means the reverse.
|
|
56
|
-
- `baseline` means there is no previous successful snapshot. A first-run issue
|
|
57
|
-
is still a current review and a new alert.
|
|
58
|
-
- `failed`, `quota-blocked`, and `deferred` are operational outcomes, not SEO
|
|
59
|
-
defects. They are not comparable with a successful indexed state.
|
|
60
|
-
- `requestSent: false` means the local quota broker blocked the call before it
|
|
61
|
-
reached Google. Use `retryAt` when it is present.
|
|
62
|
-
- Use `issueCodes` and typed `changes` for machine reasoning. Keep
|
|
63
|
-
`coverageState` as display evidence because Google localises that free text.
|
|
64
|
-
|
|
65
|
-
## Guardrails
|
|
66
|
-
|
|
67
|
-
- URL Inspection is Google's indexed version for one URL. It is not a live
|
|
68
|
-
crawl and does not guarantee current search appearance.
|
|
69
|
-
- Do not report every `NEUTRAL` verdict or canonical difference as a defect.
|
|
70
|
-
- Do not infer inventory-wide health from the bounded selected sample.
|
|
71
|
-
- Sitemap failures wait 24 hours before automatic selection retries. Do not
|
|
72
|
-
retry quota-blocked or deferred URLs before `retryAt`.
|
|
73
|
-
- The local UTC-day quota ledger cannot observe calls made by other machines or
|
|
74
|
-
Google clients. A provider 429 remains authoritative.
|
|
75
|
-
- Fix authentication and property access failures instead of treating the
|
|
76
|
-
report as sparse data.
|
|
77
|
-
- Prefer BYO Google credentials if shared OAuth project quota becomes a limit.
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
interface:
|
|
2
|
-
display_name: "Index Watch"
|
|
3
|
-
short_description: "Monitor exact Google indexed-state changes safely"
|
|
4
|
-
default_prompt: "Use $index-watch to inspect a bounded URL set, separate current index reviews from regressions and failures, and explain the evidence without treating Google URL Inspection as a live test."
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: internal-links
|
|
3
|
-
description: Find fetched source pages with query evidence relevant to one target URL and no verified contextual link; use when an agent needs bounded link candidates rather than automatic anchor insertion.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Internal link candidates
|
|
7
|
-
|
|
8
|
-
Use this report to find source pages whose retained GSC queries overlap with demand for a target URL. It resolves target aliases, fetches bounded candidate pages, checks technical state, and inspects observed links and placement before returning a review candidate. Exact query overlap is stronger than lexical overlap, but neither proves that a link belongs in the page or that adding one will improve rankings.
|
|
9
|
-
|
|
10
|
-
## Run the report
|
|
11
|
-
|
|
12
|
-
Use the compact MCP flow:
|
|
13
|
-
|
|
14
|
-
1. Call `seo_list_reports` with `{"category":"opportunities"}`.
|
|
15
|
-
2. Call `seo_describe_report` with `{"id":"internal-links"}`.
|
|
16
|
-
3. Call `seo_run_report` with `{"id":"internal-links","params":{"site":"sc-domain:example.com","targetUrl":"https://example.com/guides/seo","days":90,"limit":15,"checkLimit":40,"minImpressions":25}}`.
|
|
17
|
-
|
|
18
|
-
The CLI invokes the same handler:
|
|
19
|
-
|
|
20
|
-
```sh
|
|
21
|
-
seo reports describe internal-links --json
|
|
22
|
-
seo reports run internal-links --params '{"site":"sc-domain:example.com","targetUrl":"https://example.com/guides/seo","days":90,"limit":15,"checkLimit":40,"minImpressions":25}' --json
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
`site` and `targetUrl` are required. `checkLimit` bounds fetched candidates; `limit` bounds returned candidates. Increase fetch concurrency or enable JavaScript only when the site and task justify the extra load.
|
|
26
|
-
|
|
27
|
-
## Interpret and act
|
|
28
|
-
|
|
29
|
-
Check `dataStatus`, target verification, aliases, canonical, technical signals, and source completeness first. Review `selection.attemptedSources`, checked, failed, unchecked, technical exclusions, alias exclusions, and existing-link exclusions. A low `checkLimit` can leave plausible candidates unchecked. Each item includes exact or lexical query matches, shared terms, impressions, fetch diagnostics, technical signals, and `linkEvidence`. Distinguish `missing`, `non-contextual-only`, and `alias-contextual`; respect observed and limited link counts. Priority is a heuristic combining match evidence, not estimated impact.
|
|
30
|
-
|
|
31
|
-
Safe action is to read the source passage, confirm the target is genuinely useful there, choose natural anchor wording, add one contextual link, and recrawl to verify it. Do not insert links in bulk, replace navigation links without reason, link from technically unsuitable pages, or claim ranking impact from a candidate score.
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: link-recovery
|
|
3
|
-
description: Join retained GSC page value with current redirect and indexability checks; use it to prioritise previously visible URLs that may now be broken or misdirected.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Recover search-value URLs
|
|
7
|
-
|
|
8
|
-
Use `link-recovery` to find retained GSC page rows with prior clicks or
|
|
9
|
-
impressions whose current fetch path ends in a technical problem. This joins
|
|
10
|
-
historical search observations with a present redirect trace, which is useful
|
|
11
|
-
for triage after migrations or URL changes. Prior visibility helps order the
|
|
12
|
-
queue. It does not prove that fixing a URL will restore the same traffic.
|
|
13
|
-
|
|
14
|
-
## Run the report
|
|
15
|
-
|
|
16
|
-
With MCP, call `seo_list_reports` with `{"category":"monitoring"}`, call
|
|
17
|
-
`seo_describe_report` with `{"id":"link-recovery"}`, then use `seo_run_report`.
|
|
18
|
-
Example:
|
|
19
|
-
`{"id":"link-recovery","params":{"site":"sc-domain:example.com","days":90,"limit":25,"minClicks":1,"minImpressions":100,"js":false,"refresh":true}}`.
|
|
20
|
-
|
|
21
|
-
The CLI has the same schema:
|
|
22
|
-
|
|
23
|
-
```sh
|
|
24
|
-
seo reports describe link-recovery --json
|
|
25
|
-
seo reports run link-recovery --params '{"site":"sc-domain:example.com","days":90,"limit":25,"minClicks":1,"minImpressions":100,"refresh":true}' --json
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
The discovery schema currently exposes broad number types. Use positive whole
|
|
29
|
-
days and bounded non-negative thresholds.
|
|
30
|
-
|
|
31
|
-
## Interpret the output
|
|
32
|
-
|
|
33
|
-
Confirm `range` and `summary.checked` before reading recoverable counts. The
|
|
34
|
-
summary separates high, medium, and low severity and totals observed clicks and
|
|
35
|
-
impressions for affected retained rows. Those `clicksAtRisk` and
|
|
36
|
-
`impressionsAtRisk` values describe the checked period; they are not a forecast
|
|
37
|
-
of future loss or recovery.
|
|
38
|
-
|
|
39
|
-
Each item preserves the original URL, final URL, GSC metrics, primary and full
|
|
40
|
-
issue lists, severity, the redirect `trace`, and a recommendation with evidence,
|
|
41
|
-
effort, and confidence. Inspect chain status, final-page indexability,
|
|
42
|
-
canonicals, and warnings directly. Failed checks, selection limits, or retained
|
|
43
|
-
GSC rows outside the returned set constrain coverage.
|
|
44
|
-
|
|
45
|
-
## Act safely
|
|
46
|
-
|
|
47
|
-
Restore a page only when it should still exist. Otherwise add one direct 301 to
|
|
48
|
-
the closest equivalent destination and align its canonical after verifying
|
|
49
|
-
intent. Fix server errors and accidental noindex controls before content work.
|
|
50
|
-
Do not redirect unrelated URLs to a homepage, remove intentional controls, or
|
|
51
|
-
promise traffic recovery from historical metrics.
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: llms-txt-audit
|
|
3
|
-
description: Inspect an optional llms.txt file and derive a bounded set of suitable page candidates from crawl evidence. Use when reviewing agent-facing site navigation without treating the file as a ranking requirement.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Audit llms.txt
|
|
7
|
-
|
|
8
|
-
`llms.txt` is optional publisher-provided navigation for agents. Its presence is not a general search requirement or ranking signal, and its absence is not a technical SEO defect. This report checks the observed file response and suggests eligible pages that could belong in a useful inventory.
|
|
9
|
-
|
|
10
|
-
## Run it
|
|
11
|
-
|
|
12
|
-
For MCP, call `seo_list_reports` with category `crawl` only when discovery is needed. Call `seo_describe_report` with `{ "id": "llms-txt-audit" }`, then `seo_run_report` with:
|
|
13
|
-
|
|
14
|
-
```json
|
|
15
|
-
{
|
|
16
|
-
"id": "llms-txt-audit",
|
|
17
|
-
"params": { "reportId": "crawl_example_20260710" }
|
|
18
|
-
}
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
Check MCP `isError`, then read `structuredContent`. The CLI exposes the same contract:
|
|
22
|
-
|
|
23
|
-
```sh
|
|
24
|
-
seo reports describe llms-txt-audit --json
|
|
25
|
-
seo reports run llms-txt-audit --params '{"reportId":"crawl_example_20260710"}' --json
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Using `url` instead of `reportId` starts a fresh crawl. Prefer a saved snapshot when the recommendations will be compared with other reports.
|
|
29
|
-
|
|
30
|
-
## Interpret the result
|
|
31
|
-
|
|
32
|
-
Review `exists`, the resolved file URL, response status, headline, issues, and `recommendedPages`. Candidate pages are drawn from successfully fetched, indexable pages and exclude common utility or private paths; ordering uses crawl evidence such as internal authority and content depth. That selection is a heuristic inventory, not proof that every important page is present or suitable for publication.
|
|
33
|
-
|
|
34
|
-
Check the source report's date, cap, partial state, failed requests, warnings, and caveats with `crawl-report`. A short recommendation list from a capped crawl is not sitewide evidence. If the file exists, verify that its URLs are current, canonical, public, and aligned with publisher intent. If it does not exist, recommend creating one only when it improves agent navigation. Keep any generated file concise and human-reviewed; never claim that adding it will improve indexing, rankings, traffic, AI selection, or citations.
|