rankforge
Generates Astro-idiomatic fixes for the mechanical SEO issues the audit finds (robots.txt, sitemap conventions, canonicals, viewport, schema), via the get_fix_template tool with --framework astro.
Provides MDX/MDX-based static site conventions for framework fixes and checks around robots.txt and sitemap handling.
Provides Next.js-idiomatic patches for the mechanical SEO issues RankForge detects (robots.txt, sitemap, viewport, canonical, schema), so the agent can apply them directly in a Next.js repo.
Provides Nuxt-idiomatic patches for the mechanical SEO issues the audit surfaces (robots.txt, sitemap, canonical, schema and similar).
Supports React projects via the vite-react framework profile when emitting idiomatic fixes for detected SEO issues.
Provides Remix-idiomatic patches for mechanical SEO findings such as robots.txt, sitemap, viewport and canonical tags.
Provides SvelteKit-idiomatic patches for the mechanical SEO issues found during the audit (robots.txt, sitemap, canonical, schema and more).
Supports Vite (vite-react) projects when generating framework-idiomatic fixes for the SEO issues the audit reports.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@rankforgeaudit http://localhost:3000 and fix the SEO issues you find"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
septune
Formerly
rankforge-cli: same tool, new name.
Ship fast. Stay indexed. Technical SEO and AI-search readiness, measured, not guessed.
Septune checks your site where SEO breaks: in your editor before you push (your localhost included), on every pull request (preview against production, with a comment and a failing check), and in production. No AI in the measurements, no API key, no account, nothing phones home.
npx septune audit https://your-site.comSeptune audit https://your-site.com/
25 pages · 6.2s · deterministic, no AI, no external API
every linked page crawled · 31 sitemap URLs
Score 84/100
metadata ███████████░ 93
indexing █████████░░░ 71
images ████████████ 100
internal-linking ██████████░░ 86
…
Issues (9)
CRITICAL Pages set to noindex (1)
→ https://your-site.com/pricing
HIGH hreflang annotations Google will ignore (3)
MEDIUM Pages missing a canonical URL (2) · fix template
…
AI search readiness 64/100 4 things to improve, run: septune geo https://your-site.com/Contents
In your terminal: audit, compare, watch
In your AI editor (the agent): Claude Code plugin, Cursor, VS Code, Windsurf, Claude Desktop
In your CI: comment on the pull request, and fail it when it breaks SEO
Hosted monitoring: Septune checks production every day and alerts you
What it checks · AI-search readiness (GEO) · Commands · Troubleshooting
Requires Node.js 18+ (check with node -v). Works on macOS, Linux and Windows, and CI runs every commit on all three.
Related MCP server: Web Validator by DigestSEO
1. In your terminal
npx septune audit https://your-site.com # full audit
npx septune audit http://localhost:3000 # your dev server, before you deploy
npx septune diff https://your-site.com http://localhost:3000 # what your change breaks
npx septune geo https://your-site.com # can ChatGPT / Claude / Perplexity cite you?
npx septune llms https://your-site.com --out public/llms.txt # generate llms.txtnpx downloads and runs the latest version each time. Using it a lot? Install it once and drop the npx:
npm install -g septune
septune audit https://your-site.comIt crawls like a search engine. Links first, breadth-first, then the URLs only your sitemap knows about (sitemap indexes and .xml.gz included). It honours robots.txt the way Googlebot reads it (RFC 9309: wildcards, longest match wins), reads X-Robots-Tag headers as well as meta tags, and checks your HTTPS certificate. 25 pages by default, up to 500 with --pages.
Catch regressions before they ship. Compare two versions of a site, page by page:
septune diff https://your-site.com https://preview.your-site.comSeptune diff https://your-site.com/ → https://preview.your-site.com/
1 critical change: /pricing became noindex (robots meta tag)
CRITICAL /pricing became noindex (robots meta tag)
WARNING /docs canonical changed to /docs/v2
Fixed Pages missing a meta description
3 differences come from the environment, not the code (preview headers, robots.txt, sitemap host…):It exits 1 on critical changes: pages that start failing or redirecting, new noindex, robots.txt blocking Google, a broken sitemap, an expired certificate. What only comes from the environment (a preview's noindex header, canonicals pointing at production) is listed apart and never fails the check. --fail-on new also fails on any new issue.
Watch a site over time. Save a baseline, then compare each run against it:
septune watch https://your-site.com # first run saves .septune/baseline.json
septune watch https://your-site.com # later runs: exit 1 if something regressed
septune watch https://your-site.com --update # accept the current state as the new baselineseptune audit <url> --save snap.json writes the same snapshot, and diff takes snapshots or live URLs on either side.
Fix what it finds. Mechanical issues come with a ready, framework-idiomatic patch:
septune fix framework-robots-missing --framework nextjs
septune fix indexing-canonical-missing --framework astro --url https://your-site.comShare it. --html report.html writes a self-contained report. For a client, put your name on it: --brand "Your Studio" --brand-url https://your.studio --brand-color "#0f766e". The branded report doesn't mention Septune.
Core Web Vitals of real users. septune vitals https://your-site.com reads Google's Chrome UX Report: LCP, INP, CLS, FCP and TTFB at the 75th percentile, for the page or, when it has too few visits, the whole origin. It needs a free CrUX API key in CRUX_API_KEY, and it is the only command that sends anything to a third party (the URL, to Google). --vitals adds the same numbers to audit, watch and their snapshots.
2. In your AI editor (the agent)
This is where Septune is most useful: your coding assistant gets Septune's tools over MCP, audits your site (localhost included), and edits the files in your repo to fix what it finds. Septune measures; your assistant reasons and writes the code.
It runs locally: no server, no account, no key.
Claude Code: the plugin
/plugin marketplace add Barbudda/septune
/plugin install septune@septuneYou get the MCP tools and two skills: /septune:seo audits the site in this repo and fixes what it can, /septune:check compares your local or preview version with production before you ship. Claude also uses them on its own when you ask about SEO.
Prefer the bare MCP server?
claude mcp add septune -- npx -y septune mcpWindows (native, not WSL):
claude mcp add septune -- cmd /c npx -y septune mcp
Check it: claude mcp list should show septune … ✓ Connected.
Cursor
~/.cursor/mcp.json (all projects) or .cursor/mcp.json (this project):
{
"mcpServers": {
"septune": { "command": "npx", "args": ["-y", "septune", "mcp"] }
}
}VS Code (Copilot agent mode)
.vscode/mcp.json:
{
"servers": {
"septune": { "type": "stdio", "command": "npx", "args": ["-y", "septune", "mcp"] }
}
}Windsurf
~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"septune": { "command": "npx", "args": ["-y", "septune", "mcp"] }
}
}Claude Desktop
Settings → Developer → Edit Config (claude_desktop_config.json):
{
"mcpServers": {
"septune": { "command": "npx", "args": ["-y", "septune", "mcp"] }
}
}Windows: use
"command": "cmd", "args": ["/c", "npx", "-y", "septune", "mcp"], then restart the app.
Then just ask
"Use septune to audit http://localhost:3000 and fix everything you can."
"Before I push: compare localhost:3000 with production and tell me if I broke anything."
"Check whether AI search engines can cite my site, and fix what blocks them."
The tools your assistant gets
Tool | What it does |
| Full audit: scores, every issue with evidence and URLs, orphan pages, click depth, link suggestions |
| Production vs your local or preview version: what changed, new and fixed issues, score delta |
| Fast check of one page while you iterate |
| AI-search readiness: AI crawler access, llms.txt, server-rendered text, citability |
| Builds an llms.txt from your pages |
| Idiomatic patch for a mechanical issue (robots, sitemap, viewport, canonical, schema…) |
| Explains an issue from the Septune knowledge base |
| The rule catalog, with the same |
3. In your CI (GitHub Action)
Compare each pull request's preview deployment with production, post the result on the pull request, and fail the check when the change would remove pages from search:
# .github/workflows/seo.yml
name: SEO
on: [pull_request]
permissions:
contents: read
pull-requests: write # lets Septune comment on the pull request
jobs:
seo:
runs-on: ubuntu-latest
steps:
# …your step that deploys the preview and outputs its URL…
- uses: Barbudda/septune@v0.3.0
with:
url: ${{ steps.deploy.outputs.preview-url }} # the version to check
baseline-url: https://your-site.com # production
fail-on: critical # or: new, none
report: septune-report.html
- uses: actions/upload-artifact@v4
if: always()
with:
name: seo-report
path: septune-report.htmlSeptune posts one comment on the pull request and updates it on every push: what changed compared with production, the issues fixed, the audit's score and top issues. The same summary goes to the job page. Set comment: false to skip the comment; pull requests from forks get a read-only token, so they only get the job summary.
Without baseline-url, the Action audits the URL alone: add fail-under: 80 (technical SEO) and geo-fail-under: 60 (AI-search readiness) to gate on scores.
Without the Action, in any CI: npx septune diff "$PROD_URL" "$PREVIEW_URL" exits 1 on a critical regression, and --markdown summary.md writes the summary as Markdown.
4. Hosted monitoring
Your next deploy can still break production when nobody runs the CLI. The hosted app at www.septune.dev runs the same engine on your production site on a schedule, compares each check with the previous one, and alerts you when something critical changes: pages that start failing, a new noindex, robots.txt blocking Google, the sitemap gone, the HTTPS certificate about to expire, Core Web Vitals getting worse.
Free: 1 site, checked weekly, email alerts.
Pro: 5 sites, checked daily, alerts by email, Slack, Discord or webhook.
Studio: 25 sites for freelancers and agencies, with an alert address per client.
Pro and Studio open soon: pre-order one and you'll get an email the day it does.
The CLI, the editor agent and the GitHub Action stay free and open source.
No install at all? www.septune.dev/audit runs the engine on a few pages of any public URL, free, no signup.
What it checks
54 deterministic checks in 8 categories, plus 12 for AI search. Every finding cites evidence from the site; nothing is inferred by a model. septune rules lists them all with their ruleId.
Indexing:
noindexin meta tags andX-Robots-Tagheaders, canonicals (missing, pointing elsewhere, or pointing at a page that redirects, fails or is noindexed), hreflang (invalid codes, missing self-reference, missing return links), soft 404s (error pages served with 200, and missing URLs that return 200), robots.txt (failing with 5xx, served as HTML, blocking Googlebot or important pages), sitemap hygiene (redirects, errors, noindexed or non-canonical URLs listed) and gaps, HTTPS certificate (expired, untrusted, expiring within 14 days), redirect chains, near-duplicate pages,<html lang>Metadata: missing or duplicate titles and descriptions, title length, OpenGraph image, title and H1 that don't match the content
Structure: missing or multiple H1, skipped heading levels, thin pages, readability, keyword stuffing
Images: alt text, dimensions (layout shift), lazy-loading, real byte weights and legacy formats (fetched, not guessed)
Structured data: missing JSON-LD, and the properties Google requires for rich results (Product, Event, Recipe, JobPosting, VideoObject, LocalBusiness, Review, BreadcrumbList)
Internal linking: orphan pages (including those only the sitemap lists), click depth, broken links (real HTTP status), generic anchors, related pages that should link to each other
Performance: server response time, render-blocking resources, oversized HTML and images, mixed content, mobile viewport, and Core Web Vitals of real users with
--vitalsFramework: robots.txt and sitemap presence and conventions for Next.js, Nuxt, Astro, SvelteKit, Remix, Vite, MDX and static sites
AI-search readiness (GEO)
Answer engines (ChatGPT search, Claude, Perplexity, Gemini, Copilot) can only cite a page they're allowed to fetch, can read without running JavaScript, and can extract a clear answer from. septune geo checks all three:
Checks | |
Access | robots.txt rules for 21 crawlers, split into search bots (Googlebot, Bingbot, OAI-SearchBot, Claude-SearchBot, PerplexityBot…: needed to be cited) and training bots (GPTBot, ClaudeBot, Applebot-Extended, CCBot…: blocking those is a legitimate choice, shown but not scored) · |
Readable |
|
Citable | structured data describing the content · Organization/Person identity with |
Honest limits: this measures what you control. Whether an engine ends up citing you depends on the engine, and nobody outside them can measure or promise that. Google Search doesn't use llms.txt, and FAQ and HowTo markup no longer produce rich results in Google, so Septune doesn't push them.
Commands
Command | What it does |
| Full technical-SEO audit + AI-search summary |
| What changed between two snapshots or two live URLs. Exit |
| Compare with a saved baseline ( |
| Core Web Vitals of real users from Google CrUX ( |
| AI-search readiness in detail |
| Generate an llms.txt ( |
| Internal-link suggestions, orphan pages, strongest pages |
| Print a ready-to-apply patch ( |
| The rule catalog |
| Run as a local MCP server (for editors) |
Flag | |
| Pages to crawl: linked pages first, then sitemap-only ones (default 25, max 500) |
| Parallel requests (default 4, max 8) |
| Crawl paths robots.txt disallows for SeptuneBot (your own site only) |
|
|
| Machine-readable output |
| Exit |
|
|
| Write a snapshot for |
|
|
| Self-contained HTML report ( |
| Add Core Web Vitals from CrUX ( |
| Skip fetching images and links (faster) |
| Plain output (or |
Troubleshooting
node: command not found/ version errors: install Node 18+ from nodejs.org.Windows: the editor says the MCP server failed to start: use the
cmd /c npx …form shown above; editors can't launchnpxdirectly on Windows. The Claude Code plugin handles this for you."robots.txt disallows SeptuneBot on this URL": the site's robots.txt blocks crawlers on that path. If it's your own site, re-run with
--ignore-robots."Couldn't reach that site": the URL must answer over http(s) from your machine. For local sites, start your dev server first.
CI can't audit
localhost: CI runners can't see your laptop. Audit a deployed preview or staging URL there.diffflags a preview'snoindex: it shouldn't. Preview hosts like Vercel sendX-Robots-Tag: noindexon purpose, and Septune lists that under environment differences when the two URLs are on different hosts. If it still counts as a regression, please open an issue.vitalssays there's no data: Google only publishes CrUX numbers for pages and origins with enough Chrome traffic. A small or new site has none, and Septune says so rather than estimating.It doesn't report backlinks / rankings / search volume: that is by design. Those need data only search engines and paid indexes have; Septune sticks to what can be measured from your site.
A finding is wrong on your site: that's a bug, so please open an issue with the URL.
Develop
git clone https://github.com/Barbudda/septune && cd septune
npm install
npm test # builds, then runs the end-to-end suite against local fixture sites
node dist/index.js audit https://example.comThe engine lives in src/lib/audit (rules, crawler checks, snapshots and diffs, GEO, fix templates); the CLI in cli/src; the Claude Code plugin in plugin/.
License
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Technical SEO and AI-readiness audits for any page, plus a check that your fix worked.
Generate 18 AI readiness files (llms.txt, ai.txt, RAG indexes, schema) for any website.
Audit pages for SEO and AI search: scores, fixes, AI crawler access, llms.txt. Pay per use.
Audits AI-crawler access, structured data and llms.txt on a site, and drafts the fixes.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI agents to check whether a public website is crawlable, understandable, and ready for AI search workflows through local-only audits of robots.txt, sitemaps, metadata, and llms.txt.336 npm1MIT
- AlicenseAqualityAmaintenanceEnables AI coding assistants to validate HTML/CSS markup using W3C APIs, perform technical SEO audits, check broken links, and validate JSON-LD schemas directly in local workspaces.81,198 npm9MIT
- AlicenseAqualityAmaintenanceEnables AI agents to diagnose and fix technical SEO, content, and generative engine optimization issues by providing 72 tools that integrate Google Search Console, Google Analytics 4, PageSpeed Insights, structured data, llms.txt, WordPress, and GitHub.7210 npm18MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to crawl live websites, audit AEO readiness, generate Schema.org @graph JSON-LD, llms.txt, ai.txt, and robots.txt, inject structured data into HTML, validate optimizations, and retrieve framework-specific code snippets.MIT