In Claude Code
Plugin
The server plus /seo-check, /ai-visibility and a skill that fixes your source, checks the build before deploy and confirms after.
/plugin marketplace add seoonpage/seo-mcp-server
/plugin install onpage@onpage-devAsk Claude, ChatGPT or Cursor how a page does in Google and AI search. Your AI agent scans it with OnPage.dev, writes the fixes and checks they worked. Free, no account.
Pick where you work. One URL, no account, no key.
https://onpage.dev/mcpScan example.com with OnPage.dev.You get a score and the fixes.
claude mcp add --transport http onpage https://onpage.dev/mcp/mcp to see onpage connected.Scan example.com with OnPage.dev.You get a score and the fixes. Want slash commands and the fix skill too? See the plugin below.
https://onpage.dev/mcpScan example.com with OnPage.dev.You get a score and the fixes.
~/.cursor/mcp.json:{
"mcpServers": {
"onpage": { "url": "https://onpage.dev/mcp" }
}
}Scan example.com with OnPage.dev.You get a score and the fixes.
.vscode/mcp.json:{
"servers": {
"onpage": { "type": "http", "url": "https://onpage.dev/mcp" }
}
}Scan example.com with OnPage.dev.You get a score and the fixes.
https://onpage.dev/mcp{
"mcpServers": {
"onpage": { "url": "https://onpage.dev/mcp" }
}
}https://onpage.dev/mcp?tools=core for the 10 main tools.The same tools, wired into where you build and ship. Docs and examples on GitHub.
In Claude Code
The server plus /seo-check, /ai-visibility and a skill that fixes your source, checks the build before deploy and confirms after.
/plugin marketplace add seoonpage/seo-mcp-server
/plugin install onpage@onpage-devOn every pull request
Scans the HTML your build produces, comments the scores on the pull request and fails below your minimum.
- uses: seoonpage/seo-mcp-server@v1
with:
paths: "dist/**/*.html"
min-score: "80"Every day
Checks your fix log and opens an issue with the restore code when a deploy undid a fix. Closes it once all are live.
- uses: seoonpage/seo-mcp-server/guard@v1
with:
fix-log-id: "YOUR_FIX_LOG_ID"Your assistant runs the tools in a loop until the page is right. This is what that looks like in Claude Code.
Fix the SEO on our pricing page and keep going until it scores 90 or more.
scan_page46 3 errors: no meta description, no H1, title 14 charactersget_fix_packTitle, description and canonical, written from the pagegenerate_schemaProduct JSON-LD, 2 values to fill inscan_html92 before deploying, all errors gonerescan_and_compare94 live, +48 since the first scanDone. The pricing page went from 46 to 94. I added a meta description, an H1, a longer title and Product structured data. Two prices in the JSON-LD still need your real values.
create_dashboard_feed checks your key pages every day, and build_seo_dashboard turns it into a live SEO command center in Claude: realtime visitors from your own GA4 next to SEO health, fixes shipped, speed and AI visibility. No more switching between GA4, Search Console and an SEO tool.get_fix_pack and platform: "cloudflare", a Cloudflare Worker that corrects the tags as the page is served, on any CMS on your own Cloudflare account. build_edge_rules fixes a whole section at once, and get_prerender_worker makes a JavaScript app readable for AI crawlers. No ticket, no waiting for a developer, and one click to roll back.log_fix records every fix that shipped. OnPage.dev checks about every 6 hours that each one is still live, sends the restore code to your webhook when a deploy undoes it, feeds the dates to measure_impact, suggests a rollback when a fix did worse, and get_fix_log turns it into a client-ready monthly report.measure_impact closes the loop: Search Console, GA4 or Ahrefs numbers from before and after the fixes, compared with pages you did not touch, so seasonality and Google updates are not counted as your result. And it measures more than clicks: diagnose_traffic_drop explains a drop page by page, find_ctr_gaps and find_striking_distance find the fastest wins, check_vitals_trend shows speed before and after, and measure_ai_citations proves the gains in AI answers.watch_page with competitor_of follows a competitor's page. When they add a section, new structured data or a lot more text, the alert says what your page is missing and which tool fixes it.And the rest of the toolbox. Every tool, step by step
?tools=core.Every step from finding a problem to proving the fix worked is a tool your AI agent can call. Pick a step to see what it does.
What is wrong, for Google, AI search, phones and screen readers, and what matters most.
A 0 to 100 score for one page, the issues to fix first with why and how, AI readiness and the key facts: title, description, headings, words, speed and structured data. Client-side apps are scanned as rendered.
Up to 25 pages from the sitemap, or from the home page links when there is none, worked through step by step. Finds issues across the site, broken, orphan and duplicate pages, and powers link equity, internal links and edge rules.
Scans the next pages of a running audit on every call, so a whole site fits a free service. When it is complete you get the issues by code with the pages they affect, plus the average score.
Everything OnPage.dev measures on one page, by section: speed hints from the HTML, links and anchor texts, accessibility basics, image SEO, rich results and security headers. Use it when scan_page is not detailed enough.
Which AI crawlers may read the page per robots.txt (GPTBot, ClaudeBot, PerplexityBot, Google-Extended and more), whether llms.txt exists, 15 checks for being quoted in AI answers, and the page as a model reads it.
Takes the clicks, positions and revenue from your Search Console, GA4, Ahrefs or Semrush and ranks every fix by the traffic it can win. Also explains a drop: pass last period's clicks and decaying pages come first.
Your page next to up to 3 competitors that rank for the same search: score, AI readiness, words, headings, rich results and speed side by side, the facts only they give, and the fixes to catch up.
With citation counts from Ahrefs Brand Radar or a similar tool, scans the pages ChatGPT, Perplexity and Google AI cite and the ones they skip, and shows which checks the cited pages pass that yours do not.
Eight checks for one search term: title, meta description, H1, URL, the first 100 words, subheadings, image alt texts and keyword density, with a flag for stuffing over 3%. Each check comes with a tip.
Scans the pages that rank for a keyword and works out the page type Google rewards: guide, listicle, product, category, service page, forum or video. Then tells you whether your page matches, and what to change if not.
Groups your Search Console queries into topics and shows which page owns each one, where two pages compete for the same topic, which topics have no page yet, and which internal links to add.
Your assistant writes the sub-questions AI Mode and AI Overviews fan out for a topic. OnPage.dev rates each one answered, buried, partial or missing on your page and on up to 2 competitors, with the sections to add.
Internal PageRank and click depth from a site audit: pages the home page cannot reach, pages too many clicks deep, dead ends, strong pages that pass little on, and important pages that need more links.
Audit example.com and rank the fixes by the traffic they can win.
Your agent runsstart_site_auditprioritize_fixes
Specialist checks: speed, tracking, accessibility, languages, local search and what bots and screen readers really get.
A real browser on phone, tablet and desktop: is the H1 and call to action visible, does a cookie wall cover it. With screenshots. With screenshots, plus design checks such as low contrast and uneven spacing.
The page the way screen readers and browsing AI agents read it, from the accessibility tree: landmarks, the heading outline, and every link, button, image and field with the name it gets, including the ones announced as just "link".
How the structured data describes who and what the page is about, the way AI knowledge graphs read it: which entities there are, how they connect, dead profile links, and the JSON-LD that is missing.
Finds the passages on a page that best answer a question, the way AI answer engines pick text to quote, with their length and fit. Shows whether the answer is easy to lift out or buried in a long block.
Reading ease with the formula made for the page language, measured against the right target: the pages that rank for the keyword, or the norm for the page type. Lists the sentences that are hardest to read.
Every Open Graph and Twitter Card tag, and the share image itself: does it load, its real size in pixels, type and weight, against what Facebook, LinkedIn, X, WhatsApp and Slack need. Also a free REST API.
Opens the page in a real browser and captures the hits it really sends to Google: on a first visit, after accepting cookies and on a return visit. Finds double counting, tracking before consent, a banner that never updates Consent Mode and debug mode left on.
Core Web Vitals from real Chrome visitors, the field data Google uses: LCP, INP, CLS, FCP and TTFB on phone and desktop, with a pass or fail and the share of good visits. For the trend over time, use check_vitals_trend.
Reads your server access log lines and shows what Googlebot, Bingbot and AI crawlers really request: hits per bot, the errors and redirects they get, crawl budget lost on parameters, and sitemap pages Googlebot never visits.
A WCAG 2.1 AA report for the European Accessibility Act, every check mapped to its success criterion: language, alt texts, form labels, link names, headings and contrast, plus a list of what to test by hand.
Quick check of the cookie setup from the HTML: which consent platform runs, whether Consent Mode v2 is set to denied before the tags load, and whether the v2 signals are there. For live hits, use check_ga4_tracking.
Product structured data checked for Google: name, image, price, currency and availability, identifiers like SKU and GTIN, shipping and returns, variants, and the fields merchant listings need. Missing values come with the fix.
For a question people search, finds the section that answers it on the pages that rank and on yours, and compares the format: a paragraph and its length, a list and its items, or a table. Then tells you how to rewrite yours.
Valid language and region codes, x-default and the self-reference on a multilingual page, then every language version: does it load, is it indexable, does it link back, and do the canonical and html lang match. Writes the corrected tag set.
The trust signals Google and AI models look for across the site: About, Contact, Privacy and Terms pages, email, phone and address, company and VAT numbers, Organization markup and social profiles, and on articles the author and dates.
For a business with a location: LocalBusiness markup with address, phone, opening hours and geo, whether name, address and phone match the pages, a Google Business Profile link, a map, and a page per location. Writes corrected JSON-LD.
Search Console URL Inspection results turned into causes, fixes and the next tool: noindex, robots.txt, a canonical Google ignores, crawled but not indexed. Fetch the rows with your own Search Console tool.
Groups the pages of a site audit by text similarity and shows which ones say almost the same thing, with their titles, words and canonicals. Per group the page to keep, and whether to merge with a 301, set a canonical or rewrite.
Classifies every query parameter in the site's links as tracking, session, search, sort, pagination or filter, and finds crawl traps: tracking in internal links, crawlable search results, filter combinations and pagination that canonicalises to page 1. Writes the robots.txt rules.
Our GA4 numbers look doubled. Check the tracking and whether the cookie banner passes consent on.
Your agent runscheck_ga4_trackingcheck_consent
Ready code and plans, written from the page itself.
The fixes for every issue: as HTML to paste, as a pull request, applied in WordPress, or served at the edge by a Cloudflare Worker on any CMS.
Writes JSON-LD for Article, Product, FAQPage, Organization or BreadcrumbList from the page's own content and checks it against Google's rich result rules. Values it cannot read are marked TODO, so nothing is guessed.
A ready-to-upload llms.txt built from the sitemap and home page: the site name, a short summary, and the main pages grouped by section with their titles. Check it afterwards with validate_llms_txt.
Writes robots.txt rules for 13 AI crawlers from a policy you choose: allow all, AI search only, block training, or block all. Merged into the site's current robots.txt, so your existing rules stay in place.
For a migration or a restructure: matches old URLs to new ones by path and title with a confidence score, lists the ones to check by hand, and writes the rules for _redirects, nginx, Apache or Next.js.
Shows how a title and meta description appear in Google: the pixel width against the cut-off on desktop and mobile, and the truncated text a searcher would see. Iterate on variants until they fit.
A writing brief for a search term from the pages that rank for it: the subtopics and questions they cover, the facts and figures they give, the length and the schema they use, and what your page could add.
From a site audit, which existing pages should link to a page and with what anchor text, based on shared topics. Works for a new page too, by topic, so it gets links from the day it goes live.
From a site audit, one Cloudflare Worker rule per section: titles, descriptions, canonicals and social tags fixed on every matching page, with a preview. Only missing or out-of-range values change.
A Worker that serves GPTBot, ClaudeBot and PerplexityBot the rendered page from your own Cloudflare account, while visitors and Google get the normal one. It says so when a page does not need it.
Write the fixes for our pricing page and the JSON-LD it is missing.
Your agent runsget_fix_packgenerate_schema
Test the work before it goes live, then confirm it on the live page.
Scans HTML that is not live yet: a local build, a template or a draft from your editor. The same score and issues as scan_page, so your agent can check its own work before anything is deployed.
An SEO diff between two versions of a page, for example before and after a code change: the score change, issues fixed and introduced, and regressions like a stray noindex or a lost canonical, flagged before merging.
Checks JSON-LD before you publish it: JSON syntax, @context and @type, full URLs, ISO dates, valid prices and currency codes, and Google's required and recommended fields for each rich result.
Checks a site's llms.txt against the llmstxt.org format: served as plain text, one H1 with the site name, a summary, sections with proper links, its size, and whether the links it lists actually load.
May Googlebot, GPTBot or ClaudeBot fetch this URL? Tests it against the live robots.txt with Google's own matching rules, and shows the exact user-agent group and rule that decides, so you know what to change.
Status codes and the full redirect chain for up to 20 URLs at once, and where each one ends up. Give the expected targets after a migration and every URL that lands somewhere else is flagged.
Scans a live page again and compares it with the previous scan: the score change, the issues that got fixed, new issues that appeared and the change in AI readiness. The proof that a deploy did what it should.
A small measurement script for your own browser tool, such as Claude in Chrome or Playwright, for staging sites, localhost and pages behind a login, where OnPage.dev cannot reach. No daily limit.
Runs the first-screen checks of render_page on the results from your own browser: is the H1 and call to action visible, pop-ups and cookie walls, tap targets, small text and what crawlers without JavaScript miss.
Finds the sitemap through robots.txt, follows the index and checks the format, the 50,000 URL limit, foreign hosts and lastmod dates that are all the same. Then checks a sample of URLs for redirects, errors, noindex and canonicals elsewhere, with corrected entries.
Custom extraction for up to 20 pages: a CSS selector, a regular expression or a JSON-LD path such as Product.offers.price. See which pages have the value, which miss it and how many distinct values there are, to verify a template fix at scale.
Check the new build before we deploy, and confirm the live page after.
Your agent runsscan_htmlrescan_and_compare
Hand the plan to the tools your team already works in.
Google Sheets rows and a CSV link, a Slack message, one task per issue for Linear, Jira or Asana, and a checklist. Your agent sends it with the tools it already has.
Scans a page again and publishes a shareable proof page on onpage.dev with the score before and after, the issues fixed and the ones still open. Made for clients. Not indexed, and it expires after 90 days.
Records every fix that shipped with its old and new value, the date and how it went out. OnPage.dev then keeps it live, measure_impact saves the result per fix, and get_fix_log turns it into a client report.
Tells Bing, Yandex, Naver, Seznam and Yep that the fixed pages changed, so they recrawl within minutes instead of days. The first call sets up the key file to upload. For Google, use URL Inspection in Search Console.
Put every fix in a Google Sheet and post the summary in #seo.
Your agent runsstart_site_auditexport_findings
Catch what breaks after launch.
A daily check for regressions, with a private RSS feed and optional Slack or Discord alerts. Watch a competitor and every change they make comes with the counter-move for your page.
Every change found on a watched page, newest first: the page going down or redirecting, a new noindex, blocked AI crawlers, a changed canonical or title, the score dropping, new and fixed issues, and the counter-moves for competitors.
Stops a watch and deletes its history, including the private RSS feed. Each connection can watch 3 pages at a time, so use it to swap a finished page for the next one you want to keep an eye on.
Every logged fix is checked about every 6 hours. When a deploy undoes one, the restore code goes to your webhook or, with the fix guard GitHub Action, into an issue in your repo.
Picks the home page and up to 10 key pages and checks them every day: score, AI readiness, issues with their codes, AI crawler access and Core Web Vitals per week. The history builds up for dashboards and client reports.
Keep an eye on our top pages and tell me in Slack if something breaks.
Your agent runswatch_page
Prove what the fixes did for traffic.
Search Console, GA4 or Ahrefs numbers from before and after, against pages you did not touch, so seasonality is not counted as your win. With a fix log, the result is saved per fix.
Two periods from Search Console, compared page by page: lost rankings, lower search demand, fewer clicks at the same position because of an AI Overview, or pages that dropped out. Ranked by lost clicks, with the next tool per cause.
Results on page 1 whose click-through rate is far below normal for their position, with the clicks a better title and description could win. Quick wins that need no ranking change, tested with check_snippet.
Queries at positions 8 to 20 with real impressions, grouped per page, with the clicks a move into the top 5 could win and the pages that compete for the same query. The fastest ranking wins first.
Core Web Vitals from real Chrome users, weekly for about 9 months, on phone and desktop. Give the date a speed fix went live and see the weeks before and after, and since when each metric passes.
How often AI assistants cited your pages before and after the fixes, per engine, against pages you did not change, so a general rise in AI traffic is not counted as your result.
The feed as clean tables: overview, pages, issues over time, open issues, vitals, AI access and fixes. Dates and full URLs, so they join with GA4 and Search Console or their BigQuery exports in Claude Dashboards.
A complete blueprint for a live dashboard in Claude: realtime visitors from your own GA4, traffic from Search Console, and SEO health, fixes, speed and AI visibility from OnPage.dev, with ready BigQuery SQL and the prompt.
Did last month’s fixes win us more clicks than the pages we did not touch?
Your agent runsmeasure_impact
prioritize_fixes are used for that answer only. Your assistant receives the results; what it does with them falls under its own privacy rules.