Deft
Ask AI

Search

Search skills, authors and topics

seo

Use for SEO audits, rankings, keyword research, indexing, metadata, Search Console, GA4, and AI search visibility. Routes to evidence-backed reports through the local SEO CLI and MCP server.

Install

npx skills add https://github.com/iannuttall/seo --skill seo

seo

seo reads Search Console, Google Analytics, Bing Webmaster Tools and Clicky data, crawls sites, checks live pages, and gets keyword and backlink data from DataForSEO or Ahrefs.

Use the MCP tools when they are connected (hosted at https://seoskill.dev/mcp, or local with seo mcp serve). Otherwise use the CLI: seo, or npx -y seo. Add --json for JSON.

seo crawl --url <url> needs no sign-in and works on any site, local and staging too. The other commands need the person's data: seo login prints a link for them to approve, then run it again.

CLIMCP toolReturns
seo report --site <site>seo_reportSearch Console overview and sections; with no site, last week across the sites in the weekly site audit
seo page --url <url>seo_pageOne URL: live page, index status, queries
seo compare --site <site> --date <date>seo_compareBefore and after a date, with Google updates
seo index --site <site>seo_indexGoogle's indexing reasons, labelled, and pages that lost their clicks
seo research <action>seo_researchKeywords, keyword ideas, SERP (organic position, mobile) and SERP overlap, whether Google indexed any URL (index_check), top pages, competitors, backlinks, pages by backlinks, link gaps, AI answer citations, for a site, subfolder (example.com/blog/) or page; provider optional; next pages are free for a day
seo data --site <site>seo_dataRaw Search Console, Bing, Clicky or Google Analytics rows
seo crawl --url <url>seo_crawlTechnical issues across a site
seo internal-links --site <site> or --url <url>seo_internal_linksLinks to add across a site, or to one page
seo lint <files> or --url <url>seo_lintLines in a draft, title, description or live page that read as AI-written, each with a fix; --only ai for AI patterns alone; no sign-in
seo sitesseo_sitesThe properties the person can read
seo site new <folder>, then seo site guide <step>CLI onlyBuild a new data-driven site on Astro and Cloudflare, one step at a time. Its build runs seo site check

Each result ends with the command to run next. Start small and ask for more: a site, then a --section (section), then --detail rows or full. seo <command> --help shows the options.

Issues kept between sessions

seo report --site <site> --section issues (section "issues") checks the site again and keeps a list of what it found, each with an id, the latest check (found, not found or not checked) and what the person marked it. When the person says they fixed an issue or want it left alone, record it: --mark fixed or --mark ignored with --issues <id>,<id> (mark, issues, optional note). Read the list at the start of a session instead of reporting old issues as new. "Fixed" is the person's word; the list says when the check still finds it. The CLI and local MCP keep the list in issues.json; the hosted server keeps it only for sites in the weekly site audit. For any other site the result says the server is not storing it and ends with the list as JSON ({"version":1,"sites":{"<site>":[...]}}, the issues.json shape): save it in the person's project, such as .seo/issues.json, and pass its contents as saved with the next issues or mark call so marks carry over.

Google updates

When the person asks whether a Google update hit the site, run seo report --site <site> --section google-updates (section "google-updates"). It compares the latest ranking update's days with the same days before and says whether that is outside the site's normal movement. --end-date (end_date) picks an earlier update. Report it as timing, never as the cause.

Indexing reasons each week

seo index inspects known URLs in a fixed order (lost-click pages, Search Console pages by clicks, the sitemap, the rest), 100 by default, and labels each Google reason fix, check, expected or indexed from a live check. In the CLI or local MCP, --max-urls (max_urls) asks for more, up to today's quota, and reuses saved inspections up to 7 days old, so paging or --detail full costs no quota. Run it once for a baseline and keep the full result (--detail full). Run it again each week with the same number and compare by URL and reason: a new reason, or a URL that moved to fix, is what to report. seo keeps no history, so you store the results. Once this runs weekly, the person can turn off Search Console's indexing emails. For one URL from such an email, run seo page --url <url>.