Claude SEO v2.6.0 is a minor release dated in the project changelog. GitHub records it as published at 22:06 UTC that day, and the tag resolves to commit 734998e. It follows v2.5.1, a fixes release published the same day at 21:27 UTC, and v2.5.0 of October 22, 2026. v2.6.0 is the current public release as this post is published.

In short: work the skills used to ask the model to do by hand (count sitemap URLs, compare served and rendered HTML, read a certificate, check a page's basics) is now done by scripts with tests. Two new scripts bring the total to 63. Skills, agents, extensions and commands are unchanged at 26, 19, 9 and 34. After updating, run /seo setup once.

Watch the tour: 12 agents audit this site

In the video below my animated AI team, Coral, Violet and Red, install Claude SEO, run a full audit of claude-seo.md and read the plan. The audit ran on v2.5.0 on November 10, 2026: 12 agents in parallel, 63 pages, 9 minutes 47 seconds, and an SEO health score of 82 out of 100. That score is the plugin's own triage heuristic, not a Google metric. The presenters' voices are synthetic.

Video thumbnail for the Claude SEO tour presented by three cartoon characters

I Let 12 AI Agents Loose on My Website's SEO. Published November 10, 2026. Runtime 3:44. Watch on YouTube.

What did the audit find on this site?

The audit in the video was real, and so were its findings. These are fixed in the update that published this post:

  • Production notes were public. 25 skill pages carried internal review notes about their audio summaries. Each now has one line of disclosure.
  • Counts contradicted each other. The homepage gave different numbers for commands, agents and scripts in different places, and showed GitHub stars from October. The counts now match the release, and the stars were checked on November 11, 2026.
  • A wrong heading. The v2.2.3 release post had v2.2.5 in its main heading.
  • A wrong crawler table. The GEO guide described ClaudeBot as serving Claude's web features. ClaudeBot is Anthropic's training crawler. Claude-SearchBot and Claude-User are now listed with their own purposes.
  • The consent banner hid the page on phones. It covered half of a 375 pixel wide screen. It now covers under a third.

Larger items from the plan are still open, such as more internal links between the guides. A tool that audits sites should publish what it finds on its own.

What do the new scripts check?

  • page_checks.py runs 47 on-page checks in one script: title, description, headings, canonical, robots, hreflang, images, links, URL hygiene, size, Open Graph, JSON-LD validity and thin content. Each finding has a stable id, a severity and trimmed evidence. Length thresholds are worded as display heuristics, not Google rules. /seo page runs it first.
  • transport_check.py reads the TLS certificate (validity, days to expiry, host and www coverage, trust), grades HSTS, CSP and the other security headers plus cookie flags, and follows the http to https and www redirects. /seo technical runs it for its security section.
  • sitemap_discovery.py --expand follows a sitemap index one level and reports URL counts, lastmod quality, entries on another host, duplicates, and the 50,000 URL and 50 MiB limits. See the sitemap skill.
  • render_page.py gains js_gap: words, links, schema types, H1, title, canonical and meta robots, as served and after JavaScript runs. A title, canonical or robots value that changes after rendering is called out.
  • parse_html.py reads more: the real source of a lazy-loaded image, the heading outline in order, JSON-LD blocks that do not parse, and text hidden by an attribute or inline style.
  • capture_screenshot.py --full scrolls through the page first so lazy images load, with a time limit on every page-side step.

What changed in existing checks?

  • Robots user-agent lines match by product token, whole and case-insensitive. GPTBot/1.1 selects the GPTBot group, and GPTBot never matches a GPTBot-Image group.
  • A 429 on robots.txt is inconclusive, not "no robots.txt, everything allowed". Google treats 429 as a server error.
  • Gzip sitemaps are read in every mode. They were reported as unsupported.
  • fetch_page.py reports time to first byte, response time and total fetch time. These are measured from your machine. They are not Core Web Vitals.
  • Hosts that have only an IPv6 address can be audited.
  • Google API calls honour HTTPS_PROXY, and the GA4 client uses the REST transport. Both were contributed by lciolecki (#339, #340).

Which security problems were fixed?

  • Hostile pages cannot stall or crash a check. An independent review of v2.6.0 found inputs that made parsing take minutes, such as a robots.txt rule made of many asterisks. All are parsed in linear time now, and each has a test with a megabyte-sized input.
  • IPv6 special ranges are refused by an explicit list that holds on every supported Python version. A host is refused if any of its address records is non-public.
  • urllib3 2.8.0 or newer is required since v2.5.1. It fixes three advisories: GHSA-8988-9cw3-xx77, GHSA-vxq7-64xx-v4gw and GHSA-gh4c-6fx4-qh6g.
  • Google data is bound to the audited domain. The Search Console and GA4 scripts take --domain and refuse to use another site's property.
  • A host:port entry in CLAUDE_SEO_LOCAL_TARGETS now holds for the whole request, and the IndexNow key check compares hosts instead of URL substrings.

What did v2.5.1 fix?

v2.5.1 is a community release: 39 pull requests from 18 contributors and 6 dependency updates, with no new commands. Some of what changed:

  • The schema hook no longer crashes on a list-valued @type, and a valid @graph document is no longer reported as missing @context.
  • Image format is judged by what the server sends, not by the URL extension.
  • A backlink is "lost" only after a GET confirms 404 or 410.
  • GA4 and Matomo top-pages reports show a failed query instead of an empty success.
  • Entity extraction in nlp_analyze.py works again, with a new --language option.

Every contributor is credited in the changelog. Thank you.

What do the counts look like now?

Itemv2.5.0v2.6.0
Sub-skills2626
Specialist agents1919
Extensions99
User-invocable commands3434
Python scripts6063
Automated tests1,0772,358

The script counts come from the repository at each tag. The test counts are the tests collected in CI at each tag.

How do I update to v2.6.0?

Reinstall through the plugin marketplace, or run the installer pinned to the tag, then check the runtime. The installation guide covers Windows and manual installs.

curl -fsSL https://raw.githubusercontent.com/AgriciDaniel/claude-seo/v2.6.0/install.sh | bash
/seo setup
/seo doctor
/seo page https://your-site.com

Run /seo setup once after updating: v2.6.0 adds one dependency (PySocks) and v2.5.1 raised the dependency floors, so the managed runtime rebuilds. If you keep drift baselines, capture them again. Parser fixes in both releases change some stored values once.

How was the release checked?

The v2.6.0 pull request passed 16 checks, including Windows, macOS and Python 3.11, 3.12 and 3.14. An independent review before release found defects, each fixed and given a test. The new scripts were also run against live sites before the tag, including public test hosts with expired, self-signed and wrong-host certificates.

On November 11, 2026 the repository had 27,909 stars and 3,615 forks.

Official source: Read the Claude SEO v2.6.0 release for the canonical summary and tag.