MrTechKing

6 min read

Claude SEO: A Full SEO Audit Team Inside Claude Code (GitHub, Scanned)

A free Claude Code plugin that audits any website for SEO and AI search, then hands you a prioritized fix list.

Claude SEO logo
✅
Scan: safe. Nothing malicious and no telemetry. Know that it adds a Claude Code hook that checks schema on every HTML edit, and that the README pitches a paid community with an early-access version. Scanned Nov 13, 2026; the full report is below.

Claude SEO turns Claude Code into an SEO consultant. Give it a URL and /seo audit sends a team of specialist agents across the site at once, checking crawlability, indexing, sitemaps, redirects, Core Web Vitals, content quality and E-E-A-T, structured data, images, local and e-commerce signals and international setup. After 10 to 15 minutes you get a report with an action plan sorted by what matters most, and every item explains why it matters and how you will know the fix worked.

It also looks at AI search. /seo geo scores how likely Google AI Overviews, ChatGPT, Perplexity and Gemini are to quote your pages and whether AI crawlers can reach them, and /seo agentic checks how well AI agents can use the site. Narrower commands cover one page, schema markup, hreflang, sitemaps, topic clusters, content briefs and change tracking between audits. If you connect the free Google APIs (Search Console, PageSpeed Insights, Chrome UX Report and GA4), reports use real field data.

It is built from 26 sub-skills and 19 agents by Daniel Agrici, MIT-licensed, with about 29,000 stars and 49 contributors since February 2026. Version 2.6.0 came out on 10 November 2026. Nine optional extensions connect paid SEO data services such as DataForSEO, Ahrefs and Firecrawl, using your own accounts.

Who it is for

Site owners, freelance SEO consultants and agencies who already use Claude Code and want a thorough audit on demand, plus marketers curious how their pages look to AI search. You need Claude Code and a little comfort with its slash commands.

Getting started

1. In Claude Code, add the plugin's marketplace

/plugin marketplace add AgriciDaniel/claude-seo

2. Install the plugin

/plugin install claude-seo@agricidaniel-claude-seo

3. Set up its own Python environment and headless browser

/seo setup

4. Run your first audit

/seo audit https://example.com

Audits fetch the pages you point them at, so run them on sites you own or have permission to test. The Google, DataForSEO, Ahrefs and other extensions only send data when you set them up and use their commands.

Safety scan

We cloned AgriciDaniel/claude-seo at commit cca7e4a on Nov 13, 2026 and ran the checks described on the GitHub Tools page: credential patterns, decode-and-execute code, install-time scripts, committed binaries, risky CI workflows, every host the code talks to, known vulnerabilities in pinned dependencies, and project hygiene. A person read every hit. This is what we found.

  • No secret hits and no committed binaries across 505 files and about 93,000 lines, mostly Python. All 11 pattern hits are text: echo lines and comments in the installers that print or describe a curl | bash command, and one test comment. The same lines are why the scanner marks five installer scripts as fetching and running a remote script; we read them, and none actually pipes a download into a shell.
  • The plugin adds one Claude Code hook. After every Edit or Write, a small Node launcher runs hooks/validate-schema.py on the file, but only if it is HTML, JSX, TSX, Vue, Svelte, PHP or EJS; it checks JSON-LD markup locally and makes no network calls. The manual installer copies skills, agents and scripts into ~/.claude and uses no sudo.
  • The extra pass for skill repos found nothing worrying. The hidden characters and injection phrases sit in tests that feed hostile pages to the auditor, and in the code that strips such characters from page text. No exfiltration hosts. The credential paths are cookie-flag checks in its security audit, and the Google commands, which use your gcloud sign-in (~/.config/gcloud) as a fallback when no service account is set up.
  • No telemetry, as PRIVACY.md says and the code agrees. The core skill only contacts the sites you audit. Optional extensions and scripts send the domains or URLs you analyze to the service you connect, such as DataForSEO, Firecrawl, Moz, Bing Webmaster or your own Matomo, each listed in PRIVACY.md.
  • The one lockfile (uv.lock) pins one package with no known advisories. Three workflows, all first-party actions, no pull_request_target. A security policy, Dependabot, contributing guide and code of conduct are present.
  • The README says this public version is free and MIT-licensed, and that members of the author's AI Marketing Hub Pro community, a paid Skool group, get a private version with early access to new features. You do not need it.

What the scanner counted

CheckResult
SecretsNone found.
Suspicious code11 pattern hits found and read; every one is listed under the raw findings.
Install-time code32 installer scripts (one fetches and runs a remote script)
Committed binariesNone.
CI workflows3 workflows. None use pull_request_target. No third-party actions.
Network hosts40 distinct hosts referenced from source; most often www.example.com, e.test, a.test, analytics.example.com. 12 URLs to a bare IP address, listed under the raw findings.
Known vulnerabilities0 advisories across 1 pinned package: 0 critical, 0 high, 0 moderate, 0 low. uv.lock: 1 packages, 0 advisories.
Project hygieneHas security policy, automated dependency updates, licence file, contributing guide. Missing CodeQL.
OpenSSF ScorecardNot scored: the project is not in Scorecard's weekly index.

The raw findings

Every hit the scanner wrote out, with a link to the exact line at the scanned commit. Secrets candidates are redacted.

Pattern hits (11)
WhereRuleMatch
extensions/ahrefs/install.sh:30download-piped-to-shellecho " Install it first: curl -fsSL https://raw.githubusercontent.com/AgriciDaniel/claude-seo/main/install.sh | bash"
extensions/ahrefs/install.sh:35download-piped-to-shell# `./install.sh` and `curl | bash` invocations.
extensions/banana/install.sh:25download-piped-to-shellecho " Install it first: curl -fsSL https://raw.githubusercontent.com/AgriciDaniel/claude-seo/main/install.sh | bash"
extensions/dataforseo/install.sh:22download-piped-to-shell# Support both traditional (curl|bash → ~/.claude/skills/seo) and marketplace
extensions/dataforseo/install.sh:38download-piped-to-shellecho " Install it first: curl -fsSL https://raw.githubusercontent.com/AgriciDaniel/claude-seo/main/install.sh | bash"
extensions/dataforseo/install.sh:82download-piped-to-shell# Determine script directory (works for both ./install.sh and curl|bash)
extensions/firecrawl/install.sh:25download-piped-to-shellecho " Install it first: curl -fsSL https://raw.githubusercontent.com/AgriciDaniel/claude-seo/main/install.sh | bash"
extensions/firecrawl/install.sh:64download-piped-to-shell# Determine script directory (works for both ./install.sh and curl|bash)
extensions/unlighthouse/install.sh:20download-piped-to-shell# Support both traditional (curl|bash → ~/.claude/skills/seo) and marketplace
install.sh:211download-piped-to-shellecho "To uninstall: curl -fsSL ${REPO_URL}/raw/main/uninstall.sh | bash"
tests/test_manifest_consistency.py:163download-piped-to-shell (test/example)Manual-install users via curl | bash got 8 versions stale. This guard
URLs to bare IP addresses (12)
WhereRuleMatch
tests/test_matomo_report.py:772ip-literal-urlassert not matomo_auth.resolves_to_private_address("https://93.184.216.34")
tests/test_transport_check.py:280ip-literal-url"https://100.100.100.200/",
tests/test_url_safety.py:168ip-literal-url"http://1.1.1.1",
tests/test_url_safety.py:203ip-literal-urlurl, ip = url_safety.validate_url_strict("https://1.1.1.1/")
tests/test_url_safety.py:205ip-literal-urlassert url == "https://1.1.1.1/"
tests/test_url_safety.py:215ip-literal-url"http://100.100.100.200/latest/meta-data/",
tests/test_url_safety.py:974ip-literal-urlassert url_safety.validate_url("http://100.101.102.103/") is False
tests/test_url_safety.py:1012ip-literal-urlassert url_safety.validate_url("http://100.101.102.103/") is True
tests/test_url_safety.py:1013ip-literal-urlassert url_safety.validate_url("https://100.101.102.103:8443/staging") is True
tests/test_url_safety.py:1014ip-literal-urlassert url_safety.validate_url_strict("http://100.101.102.103/")[1] == (
tests/test_url_safety_port_pin.py:234ip-literal-url("100.101.102.103", 80): _redirect("http://100.101.102.103:8080/"),
tests/test_url_safety_port_pin.py:239ip-literal-urlassert _get("http://100.101.102.103/", net).content == b"staging"
Installer scripts (32)

By the numbers

Stars28.9K
Forks3,693
Contributors49
Commits543
Open issues14
Open pull requests41
Releases32
Latest releasev2.6.0
LicenceMIT
Main languagePython
Project age9 months
Last pushNov 11, 2026
Tracked files505
Lines of code93.2K
Checkout size8 MB

Lines by language: Python 57.2K, Markdown 30.4K, JSON 1,509, Shell 1,490, PowerShell 1,075, YAML 878.

Questions

Is Claude SEO free?

Yes. It is MIT-licensed with no per-site pricing or usage limits. You need Claude Code, and the optional extensions connect to paid services only if you add your own accounts. A paid community gets early access to new features in a private version.

Do I need API keys?

No. Audits work out of the box. Connecting the free Google APIs adds real Search Console and field speed data, and paid tools such as DataForSEO or Ahrefs add backlink and keyword data if you have them.

Does it check AI search like ChatGPT and AI Overviews?

Yes. /seo geo scores how quotable your pages are, checks that AI crawlers can reach them and looks at your brand's presence on sites AI answers often cite. It follows Google's own advice that AI search still starts with ordinary SEO.

Will it change my website?

Not by itself. Audits read your pages and write reports. It can generate schema markup, sitemaps or hreflang tags for you to add, and any edits to your project go through Claude Code's normal permission prompts.


This post is part of GitHub Tools, where every repository is cloned and scanned before it is written up. The scan is a snapshot of one commit on one day; the repository has moved on since, so check it before you install.