Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add nuxt/nuxt.com --skill seo-opportunitiesgit clone --depth 1 https://github.com/nuxt/nuxt.comWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/nuxt/nuxt.com/seo-opportunities)<a href="https://agentmods.dev/skills/nuxt/nuxt.com/seo-opportunities"><img src="https://agentmods.dev/badge/skills/nuxt/nuxt.com/seo-opportunities/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/nuxt/nuxt.com/seo-opportunities"><img src="https://agentmods.dev/badge/skills/nuxt/nuxt.com/seo-opportunities.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00030 | $0.04045 |
| Opus 5.5 | $0.00012 | $0.01618 |
| Sonnet 5.5 | $0.00006 | $0.00809 |
| Haiku 4.5 | $0.00003 | $0.00404 |
Grade A, and why
seo-opportunities scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 95 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Use for an SEO report, search traffic changes, declining pages, low CTR, striking-distance queries, indexing issues or recommendations. For the weekly digest use compact mode below.
The report must help a teammate decide what to do this week. Collect evidence first, then write a short briefing with wins, losses, specific changes and follow-up measurements. Do not return a list of metrics followed by generic advice or a backlog of queries the agent could have run itself.
Discover the exact schemas of admin-mcp__search-console-analytics, admin-mcp__search-console-inspect-url, admin-mcp__search-console-sitemaps, admin-mcp__list-feedback and admin-mcp__crux-web-vitals before calling them. These require team access. If a tool is unavailable or not configured, report its concrete error and continue with available evidence; never invent data or bypass access controls.
Scope and dates
- Default to 28 days for a standalone report; use the requested window when supplied, including the digest's N days.
- Search Console lags 2–3 days. Set inclusive
endDateto today minus 3 calendar days;startDateisendDateminus (N−1) days. The previous window ends the day beforestartDateand spans exactly N days. Pass dates explicitly on every call; the API default remains 28 days regardless of the requested window. - Default scope is nuxt.com and all subdomains, including
ui.nuxt.comand nested subdomains. On every analytics call usefilters=[{"dimension":"page","operator":"includingRegex","expression":"^https?://([a-z0-9-]+[.])*nuxt[.]com/"}]. This includes HTTP and HTTPS URLs; the anchored hostname and trailing slash exclude lookalike domains. Do not intersect it with the old apex-only filter. If the user explicitly narrows the report to one host, REPLACE the domain-wide expression with that exact host (for example^https?://ui[.]nuxt[.]com/). Add exact-page, query and requested path filters with AND. Only use hosts covered by the configured Search Console property; if a URL-prefix property covers just the apex, disclose that subdomain data is unavailable rather than claiming full domain coverage. - Use the same property, filters and search type (
web) in both windows. Do not compare filtered totals with unfiltered property totals or older reports with different scope. - CTR is already a percentage; its changes are percentage points. Lower average position is better: write “improved 7.3 → 5.3” or “worsened 5.3 → 7.3.” When the previous baseline is zero, show the absolute change and “no prior baseline,” not a percentage. Flag tiny baselines rather than celebrating large percentages on a handful of clicks.
Date coverage gate
- Before calculating ANY period changes, query
dimensions=["date"],rowLimit=500,startRow=0for BOTH explicit windows with the selected domain-or-host/path scope. Verify all N expected calendar dates are present in each response, including each start and end date. The daily row limit must cover the whole window, including a digest requesting up to 365 days. Do not confuse date coverage with partial page/query coverage. - Search Console retains only 16 months. Two 365-day windows cannot both fit in that history. A nominal 3-day reporting lag also does not guarantee the latest requested dates have arrived. If dates are missing or a request falls outside retention, do not fill them with zero or call the comparison complete; no returned data can also mean no traffic, so coverage is unverified rather than a proven outage.
- When either window is incomplete, unavailable or unverified, show available totals separately as partial/unverified with the requested dates, actual returned date span and missing-date count where known. Suppress percent/absolute deltas, win/loss labels and trend claims that depend on that comparison. Say “comparison unavailable — .” Keep current-data recommendations only when independently supported. Do not silently shorten the window, extrapolate a full period or shift dates without refetching all evidence for both new windows. The rest of the weekly digest must continue.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 95 lines · 30 tokens per session scan A d9cc0bf4ab03
seo-opportunities is a skill published in the GitHub repository nuxt/nuxt.com (461 stars, last pushed yesterday), licensed MIT. It adds 30 tokens to every session and 4,045 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-11-04.
seo-opportunities compared with skills from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| seo-opportunitiesnuxt/nuxt.com | Skill | 461 | yesterday | MIT | A | 30 | Claude Code, Codex |
| nuxt-uinuxt/ui | Skill | 7.1k | yesterday | MIT | A | 56 | Claude Code, Codex |
| vue-expertpersonamanagmentlayer/pcl | Skill | 44 | 11d ago | Apache-2.0 | A | 78 | Claude Code |
| nuxt-docspledgeandgrow/pledge-skills | Skill | 10 | 3mo ago | MIT | A | 33 | Claude Code, Codex |
| content-passHugoRCD/evlog | Skill | 1.9k | 12d ago | MIT | A | 154 | Claude Code, Codex |
| contributingHugoRCD/evlog | Skill | 1.9k | 12d ago | MIT | A | 68 | Claude Code, Codex |
| update-component-docsAgnosticUI/agnosticui | Skill | 833 | yesterday | Apache-2.0 | A | 11 | Claude Code |