accueil / serveurs / Recherche & Web / dev.onpage/onpage
dev.onpage/onpage
serveur MCP (Model Context Protocol) · onpage-dev 2.11.0
Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur.
Est-ce que dev.onpage/onpage est sûr ?
Au dernier audit MCP Hub, le serveur MCP « dev.onpage/onpage » est classé « Non encore testé ». Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur. Le verdict est réévalué en continu ; consultez la fiche pour l'état à jour.
Méthode : MCP Hub analyse la description de chaque outil (couche 1) et, pour le verdict fort, exécute le serveur dans une micro-VM isolée avec leurres et réseau bloqué (couche 2). On publie des noms et des compteurs, jamais le contenu brut renvoyé par un outil.
Les 37 outils
- accessibility≈ 280 tokens
Accessibility for people and the European Accessibility Act. Pick with mode: wcag = WCAG 2.1 AA checks. Needs url. screen_reader = The page as a screen reader reads it. Needs url.
Paramètres, retour & exemple (5)
Paramètresurl· string · optionnel
Full address of the page, for example https://example.com/pricing.mode· string · optionnel · wcag | screen_reader
Default wcag.tree· object · optionnel
Optional: an accessibility snapshot from your own browser (role, name, level, children), for example Puppeteer page.accessibility.snapshot().detail· string · optionnel · full | brief
brief = short summary.memory_key· string · optionnel
site_memory key, records this call.
Exemple d'appel{"name": "accessibility", "arguments": {"url": "texte", "mode": "wcag", "tree": {}, "detail": "full", "memory_key": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - ai_visibility≈ 783 tokens
Whether AI assistants can read, quote and recommend a site. Pick with mode: check = AI crawler access, llms.txt, 15 citability checks and the page as a model reads it. Needs url. bots = Fetch the page as Googlebot, GPTBot, ClaudeBot, PerplexityBot and more against a browser: firewall blocks, challenges, cloaking. Needs url. gaps = Where AI answers name competitors, not you, from Brand Radar or similar. Needs site, brand, responses[{question, response, links, search_queries, engine, volume}]. citations = What pages cited by AI do differently, from citation counts. Needs pages[{url, chatgpt, perplexity, gemini, google_ai_overviews, google_ai_mode}].
Paramètres, retour & exemple (10)
Paramètresurl· string · optionnel
Full address of the page, for example https://example.com/pricing.mode· string · optionnel · check | bots | gaps | citations
Default check.site· string · optionnel
Your site, for example example.com.brand· string · optionnel
Your brand name as people write it.pages· array · optionneldetail· string · optionnel · full | brief
brief = short summary.source· string · optionnel · ahrefs | semrush | other
Where the citation counts come from.responses· array · optionnelmemory_key· string · optionnel
site_memory key, records this call.competitors· array · optionnel
Exemple d'appel{"name": "ai_visibility", "arguments": {"url": "texte", "mode": "check", "site": "texte", "brand": "texte", "pages": [], "detail": "full"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - answer_readiness≈ 429 tokens
Whether a page answers the questions people ask AI and Google. Pick with mode: questions = Sub-questions AI Mode fans out to, and which the page answers. Needs url, topic, questions. passages = The passages that answer given questions, or the gaps. Needs url, question. format = Answer format against the pages that rank. Needs url, question, competitors.
Paramètres, retour & exemple (8)
Paramètresurl· string · optionnel
Full address of the page.mode· string · optionnel · questions | passages | format
Default questions.topic· string · optionnel
The topic or main query, for example 'passport renewal'.detail· string · optionnel · full | brief
brief = short summary.question· string · optionnel
The question people ask, for example 'how long does shipping take to Germany'.questions· array · optionnel
The sub-questions an AI search engine would ask for the topic.memory_key· string · optionnel
site_memory key, records this call.competitors· array · optionnel
Optional: up to 2 pages that rank for the topic.
Exemple d'appel{"name": "answer_readiness", "arguments": {"url": "texte", "mode": "questions", "topic": "texte", "detail": "full", "question": "texte", "questions": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - backlinks≈ 1110 tokens
Turn backlink data from Ahrefs, Semrush or similar into links won back, won or cleaned up. Pick with mode: broken = Broken and lost backlinks and 404 visits into 301s and outreach. Needs rows[{target_url, source_url, anchor, domain_rating, dofollow, http_code}]. opportunities = Sites linking to competitors, and unlinked brand mentions. Needs site. outreach = One outreach email per site, as drafts for the user's mail after approval. Needs your_site, prospects[{page, type, your_url, dead_url, anchor, contact}]. disavow = A conservative disavow.txt, only after a manual action or clear negative SEO. Needs rows[{url_from, domain, is_spam, domain_rating, anchor, traffic}], reason.
Paramètres, retour & exemple (16)
Paramètresmode· string · optionnel · broken | opportunities | outreach | disavow
Default broken.rows· array · optionnel
Broken backlink rows, one per linking page.site· string · optionnel
Optional: your site's address.brand· string · optionnel
Brand name to look for in mention pages.yours· array · optionnel
Your own referring domains.detail· string · optionnel · full | brief
brief = short summary.format· string · optionnel · redirects | nginx | apache | nextjs | csv
Rule format, default redirects (Cloudflare Pages and Netlify _redirects).reason· string · optionnel · manual_action | negative_seo | other
Why a disavow is considered.audit_id· string · optionnel
Optional: a finished site audit, to match on page titles too.mentions· array · optionnel
Pages that mention the brand.live_urls· array · optionnel
Optional: your live pages, instead of reading the sitemap.prospects· array · optionnelyour_site· string · optionnel
Your site or brand name, e.g.memory_key· string · optionnel
site_memory key, records this call.competitors· array · optionnel
Each competitor with its referring domains.sender_name· string · optionnel
Name to sign with.
Exemple d'appel{"name": "backlinks", "arguments": {"mode": "broken", "rows": [], "site": "texte", "brand": "texte", "yours": [], "detail": "full"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - check_keyword≈ 455 tokens
How pages target a keyword. Pick with mode: focus = One page against one keyword: 8 checks. Needs url, keyword. cannibalization = Your pages competing for one keyword, side by side on every signal, with the plan. Needs keyword, target_url.
Paramètres, retour & exemple (8)
Paramètresurl· string · optionnel
Full address of the page, for example https://example.com/pricing.mode· string · optionnel · focus | cannibalization
Default focus.rows· array · optionnel
Optional Search Console rows for the keyword, to find the competing pages and their positions.detail· string · optionnel · full | brief
brief = short summary.keyword· string · optionnel
The search term the page should rank for, for example 'running shoes'.memory_key· string · optionnel
site_memory key, records this call.target_url· string · optionnel
The page that should rank for it.competing_urls· array · optionnel
Other pages of the same site that compete for the keyword.
Exemple d'appel{"name": "check_keyword", "arguments": {"url": "texte", "mode": "focus", "rows": [], "detail": "full", "keyword": "texte", "memory_key": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - check_links≈ 306 tokens
Status of URLs and links. Pick with mode: urls = Status, redirect chain and canonical of a list of URLs. Needs urls. outbound = Dead or moved links from a page to other sites, with archived copies. Needs url.
Paramètres, retour & exemple (6)
Paramètresurl· string · optionnel
The page to check.mode· string · optionnel · urls | outbound
Default urls.urls· array · optionnel
Addresses to check.detail· string · optionnel · full | brief
brief = short summary.expected· array · optionnel
Optional expected final address for each URL, in the same order.memory_key· string · optionnel
site_memory key, records this call.
Exemple d'appel{"name": "check_links", "arguments": {"url": "texte", "mode": "urls", "urls": [], "detail": "full", "expected": [], "memory_key": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - compare≈ 471 tokens
Compare pages side by side. Pick with mode: pages = Your page against up to 3 competitors. Needs url, competitors. html = Two versions of HTML before and after. Needs before, after. preview = Deploy preview against production before merging. Needs preview_url, production_url.
Paramètres, retour & exemple (12)
Paramètresurl· string · optionnel
Full address, for example https://example.com.mode· string · optionnel · pages | html | preview
Default pages.after· string · optionnel
HTML after the change.paths· array · optionnel
Paths like /pricing, default /.before· string · optionnel
HTML before the change.detail· string · optionnel · full | brief
brief = short summary.keyword· string · optionnel
Optional search term to compare keyword use.memory_key· string · optionnel
site_memory key, records this call.competitors· array · optionnel
Competitor page addresses.preview_url· string · optionnel
The deploy preview URL.bypass_token· string · optionnel
Vercel protection bypass secret.production_url· string · optionnel
The live site.
Exemple d'appel{"name": "compare", "arguments": {"url": "texte", "mode": "pages", "after": "texte", "paths": [], "before": "texte", "detail": "full"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - content≈ 938 tokens
What to write and how, in the site's own voice, from the pages that rank and the user's search data. Pick with mode: brief = A content brief from the pages that rank. Needs keyword, competitors. topics = Search Console queries into topics, with the page that owns each, and keyword gaps. Needs rows[{query, page, clicks, impressions, position, url}]. intent = Your page against the search intent of the pages that rank. voice = Learn how the site writes from its best articles. Needs urls. calendar = A dated calendar of refreshes and new pages, steered by what worked here. draft = A draft against the site's voice, sources and SEO, before approval. Needs html.
Paramètres, retour & exemple (17)
Paramètresurl· string · optionnel
Optional: your existing page for this term.html· string · optionnel
The draft as HTML, title in <title> or <h1>.mode· string · optionnel · brief | topics | intent | voice | calendar | draft
Default brief.rows· array · optionnel
Search Console rows by query and page.urls· array · optionnel
The site's own best articles, ones that rank and that the owner likes.ideas· array · optionnel
Topics without a page yet.start· string · optionnel
First day, YYYY-MM-DD, default today.weeks· number · optionnel
Weeks to plan, default 8.detail· string · optionnel · full | brief
brief = short summary.keyword· string · optionnel
The search term the page should rank for.queries· array · optionnel
Search Console rows by query and page, for the site-wide check.audit_id· string · optionnel
Optional: a finished site audit, for internal link suggestions.per_week· number · optionnel
Items per week, default 2.memory_key· string · optionnel
site_memory key, records this call.competitors· array · optionnel
Pages that rank for the term.webhook_url· string · optionnel
Optional https Slack or Discord webhook for a Monday reminder; off stops it.competitor_rows· array · optionnel
Optional keyword gap: competitors' organic keywords (Ahrefs organic-keywords or Semrush domain_organic for each competitor, or Semrush keyword gap rows).
Exemple d'appel{"name": "content", "arguments": {"url": "texte", "html": "texte", "mode": "brief", "rows": [], "urls": [], "ideas": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - dashboard≈ 655 tokens
A daily SEO data feed for key pages and a live dashboard in the chat. Pick with mode: feed = Start a daily feed of key pages; returns feed_id. Needs url. data = The feed as clean tables over time. Needs feed_id, dataset. build = Blueprint for a live SEO command center with realtime GA4 visitors. Needs feed_id.
Paramètres, retour & exemple (15)
Paramètresto· string · optionnel
End date, YYYY-MM-DD.url· string · optionnel
Home page of the site.from· string · optionnel
Start date, YYYY-MM-DD.mode· string · optionnel · feed | data | build
Default feed.name· string · optionnel
Optional name, for example the client's name.pages· array · optionnel
Optional key pages to track, up to 10.detail· string · optionnel · full | brief
brief = short summary.format· string · optionnel · blueprint | html
blueprint (default) for Claude Dashboards, or html for a complete, designed dashboard page filled with the feed's data, ready to show as an artifact.dataset· string · optionnel · overview | pages | issues | open_issues | vitals | ai_access | fixesfeed_id· string · optionnel
Feed from create_dashboard_feed.replace· boolean · optionnel
Replace this connection's existing feed.sources· array · optionnel
What the user has connected in Claude.bigquery· object · optionnel
Optional, for ready SQL.fix_log_id· string · optionnel
Optional fix log from log_fix, to include shipped fixes.memory_key· string · optionnel
site_memory key, records this call.
Exemple d'appel{"name": "dashboard", "arguments": {"to": "texte", "url": "texte", "from": "texte", "mode": "feed", "name": "texte", "pages": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - edge_worker≈ 318 tokens
Fixes applied at the edge on the user's own Cloudflare, on any CMS. Pick with mode: rules = One Worker that fixes a whole section by rules. Needs audit_id. prerender = Serve rendered HTML to AI crawlers for JavaScript apps. Needs url.
Paramètres, retour & exemple (6)
Paramètresurl· string · optionnel
A page of the app, for example https://app.example.com/pricing.mode· string · optionnel · rules | prerender
Default rules.detail· string · optionnel · full | brief
brief = short summary.audit_id· string · optionnel
Id of a completed site audit (start_site_audit, then get_site_audit until complete).site_name· string · optionnel
Brand name for title endings, for example 'Acme Shoes'.memory_key· string · optionnel
site_memory key, records this call.
Exemple d'appel{"name": "edge_worker", "arguments": {"url": "texte", "mode": "rules", "detail": "full", "audit_id": "texte", "site_name": "texte", "memory_key": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - entity≈ 234 tokens
How Google understands who is behind a site. Pick with mode: graph = Organization, sameAs, logo and founder in structured data. Needs url. trust = Author, about, contact and policy signals. Needs url.
Paramètres, retour & exemple (4)
Paramètresurl· string · optionnel
Full address, for example https://example.com/blog/post.mode· string · optionnel · graph | trust
Default graph.detail· string · optionnel · full | brief
brief = short summary.memory_key· string · optionnel
site_memory key, records this call.
Exemple d'appel{"name": "entity", "arguments": {"url": "texte", "mode": "graph", "detail": "full", "memory_key": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - explain_google≈ 921 tokens
Explain what Google Search Console and Bing Webmaster Tools report, and what to do. Pick with mode: index_status = Index coverage and rich result statuses, with the fix. Needs rows[{url, coverageState, verdict, indexingState, robotsTxtState, pageFetchState}]. manual_action = A manual action, with the cleanup plan and reconsideration draft. Needs action. bing = Bing Webmaster crawl issues, and Bing against Google per query.
Paramètres, retour & exemple (10)
Paramètresmode· string · optionnel · index_status | manual_action | bing
Default index_status.rows· array · optionnelsite· string · optionnel
The site or Search Console property.action· string · optionnel
The manual action as Search Console shows it.detail· string · optionnel · full | brief
brief = short summary.issues· array · optionnel
Bing crawl or index issues.memory_key· string · optionnel
site_memory key, records this call.sample_urls· array · optionnel
Example URLs Google listed.bing_queries· array · optionnelgoogle_queries· array · optionnel
Exemple d'appel{"name": "explain_google", "arguments": {"mode": "index_status", "rows": [], "site": "texte", "action": "texte", "detail": "full", "issues": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - find_opportunities≈ 936 tokens
Turn Search Console, GA4 or Ahrefs rows (also rows the user pastes) into the fastest wins, instead of judging them by hand; content_decay and traffic_drop take search_type for Discover, News, Image or Video rows. Pick with mode: ctr_gaps = Page 1 results with a click-through rate far below normal. Needs rows[{position, page, query, clicks, impressions, ctr}]. striking_distance = Queries at positions 8 to 20 worth a push. Needs rows[{position, page, query, clicks, impressions, ctr}]. content_decay = Pages slowly losing clicks over months: a refresh queue. Needs rows[{url, month, clicks}]. traffic_drop = Explain a drop page by page, by device and country. Needs rows[{url, before, after, query, device, country}]. prune = Keep, refresh, merge (301), noindex or remove (410) per page. Needs rows[{url, clicks, impressions, conversions, referring_domains, inlinks}]. discover = Readiness for Google Discover and News, with Discover or News rows. paid_organic = Google Ads terms against Search Console: ad spend you can test cutting, content to write. Needs ads[{term, cost, clicks, conversions}], gsc[{query, position, clicks, page}]. anomalies = Spike and drop days in daily rows, with Google updates near them. Needs rows[{date, clicks, impressions, page}]. ai_queries = Question and prompt-style queries per page, for AI answers. Needs rows[{query, page, clicks, impressions, position}].
Paramètres, retour & exemple (11)
Paramètresads· array · optionnel
Google Ads search terms.gsc· array · optionnel
Search Console queries.mode· string · optionnel · ctr_gaps | striking_distance | content_decay | traffic_drop | prune | discover | paid_organic | anomalies
Default ctr_gaps.rows· array · optionnel
Search Console rows for one period (28 days works well).urls· array · optionnel
Article pages to check.detail· string · optionnel · full | brief
brief = short summary.drop_date· string · optionnel
Optional first day of the drop, YYYY-MM-DD, to check Google updates around it.fix_log_id· string · optionnel
Optional fix log from log_fix, to spot undone fixes on losing pages.memory_key· string · optionnel
site_memory key, records this call.brand_terms· array · optionnel
Optional brand names, handled apart.search_type· string · optionnel · web | discover | news | image | video
Search Console search type of the rows, default web.
Exemple d'appel{"name": "find_opportunities", "arguments": {"ads": [], "gsc": [], "mode": "ctr_gaps", "rows": [], "urls": [], "detail": "full"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - fix_log≈ 739 tokens
Record shipped fixes, keep them live and report on them. Pick with mode: log = Record a shipped fix; checked every 6 hours, restore code on regression. Needs fixes[{url, field, new, old, via, ref}]. report = Every fix with status and results: a monthly client report. Needs fix_log_id.
Paramètres, retour & exemple (11)
Paramètresmode· string · optionnel · log | report
Default log.brand· string · optionnel
For the report: your agency name for the header.fixes· array · optionnelmonth· string · optionnel
For the report: YYYY-MM.detail· string · optionnel · full | brief
brief = short summary.format· string · optionnel · status | report | annotations
status (default), a client report, or GA4 annotations (one per ship date) for the Admin API.verify· boolean · optionnel
Check the live pages now (4 pages per call).webhook· string · optionnel
Optional https URL (Slack, Discord, Zapier, n8n, a GitHub Action) that gets the restore code when a fix is undone.fix_log_id· string · optionnel
Add to an existing log.memory_key· string · optionnel
site_memory key, records this call.shipped_at· string · optionnel
Date the fixes went live, YYYY-MM-DD.
Exemple d'appel{"name": "fix_log", "arguments": {"mode": "log", "brand": "texte", "fixes": [], "month": "texte", "detail": "full", "format": "status"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_fix_pack≈ 756 tokens
Fixes ready to ship: as code, for a CMS through its MCP, as a pull request or at the edge. Pick with mode: fixes = Title, description, canonical, social tags, JSON-LD; platform html, wordpress, shopify, webflow, wix, storyblok, sanity, contentful, strapi, ghost, magento, git or cloudflare. Needs url. alt_texts = Write and ship missing alt texts. Needs url. web_vitals = Speed fixes as tags, WordPress steps or a Worker. Needs url. wordpress = Send fixes, new drafts and post updates to the OnPage.dev WordPress plugin for one-click approval and undo. Needs site_key.
Paramètres, retour & exemple (12)
Paramètresurl· string · optionnel
Full address of the page, for example https://example.com/pricing.alts· array · optionnel
Step 2: the alt text per image src.mode· string · optionnel · fixes | alt_texts | web_vitals | wordpress
Default fixes.note· string · optionnel
Optional reason shown to the site owner.detail· string · optionnel · full | brief
brief = short summary.changes· array · optionnel
Optional field and new value pairs.failing· array · optionnel
Metrics that fail for real users, if known.platform· string · optionnel · html | wordpress | git | cloudflare | webflow | wix | shopify | storyblok
html (default) for code to paste; wordpress, webflow, wix, shopify, storyblok, sanity, contentful, strapi, ghost or magento for a plan with the exact fields andsite_key· string · optionnel
The site key from the plugin, wpk_...change_id· string · optionnel
Status of an earlier send.framework· string · optionnel · auto | nextjs-app | nextjs-pages | nuxt | sveltekit | astro | angular | react
With platform git: the site's framework.memory_key· string · optionnel
site_memory key, records this call.
Exemple d'appel{"name": "get_fix_pack", "arguments": {"url": "texte", "alts": [], "mode": "fixes", "note": "texte", "detail": "full", "changes": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - internal_links≈ 450 tokens
Internal links and link equity. Pick with mode: suggest = Links to add, with anchors, applied by Worker or CMS. Needs audit_id. equity = Internal PageRank and click depth from a site audit. Needs audit_id.
Paramètres, retour & exemple (9)
Paramètresmode· string · optionnel · suggest | equity
Default suggest.topic· string · optionnel
Topic or main keyword of the target page.detail· string · optionnel · full | brief
brief = short summary.phrases· array · optionnel
Optional: phrases to turn into the link, besides the anchor text, for example natural variants.audit_id· string · optionnel
Id of a completed site audit.platform· string · optionnel · cloudflare | wordpress | git
Optional: also return the links ready to apply: a Cloudflare Worker that links the first mention on each page, a WordPress edit plan, or the edits for the code.memory_key· string · optionnel
site_memory key, records this call.target_url· string · optionnel
Page that should receive links.important_urls· array · optionnel
Optional. Pages that matter most, for example top pages by clicks or revenue.
Exemple d'appel{"name": "internal_links", "arguments": {"mode": "suggest", "topic": "texte", "detail": "full", "phrases": [], "audit_id": "texte", "platform": "cloudflare"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - layout≈ 356 tokens
What visitors and crawlers see on every screen size. Pick with mode: render = First screen on phone, tablet and desktop in a real browser, and what crawlers without JavaScript get (default). Needs url. probe = A measurement script to run in the user's own browser tool. analyze = Analyse the results of that script. Needs url, results.
Paramètres, retour & exemple (6)
Paramètresurl· string · optionnel
Full address of the page, for example https://example.com/pricing.mode· string · optionnel · render | probe | analyze
Default render.no_js· object · optionnel
Optional: the probe result with JavaScript turned off, for an exact comparison.detail· string · optionnel · full | brief
brief = short summary.results· array · optionnel
One probe result per viewport, each with device set to phone, tablet or desktop.memory_key· string · optionnel
site_memory key, records this call.
Exemple d'appel{"name": "layout", "arguments": {"url": "texte", "mode": "render", "no_js": {}, "detail": "full", "results": [], "memory_key": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - llms_txt≈ 260 tokens
The llms.txt file for AI assistants. Pick with mode: generate = Write one from the sitemap and home page. Needs url. validate = Check an existing one and its links. Needs url.
Paramètres, retour & exemple (5)
Paramètresurl· string · optionnel
Home page of the site, for example https://example.com.mode· string · optionnel · generate | validate
Default generate.text· string · optionnel
Optional llms.txt content to validate instead of the live file.detail· string · optionnel · full | brief
brief = short summary.memory_key· string · optionnel
site_memory key, records this call.
Exemple d'appel{"name": "llms_txt", "arguments": {"url": "texte", "mode": "generate", "text": "texte", "detail": "full", "memory_key": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - local≈ 959 tokens
Local search: the site, the Business Profile and the map. Pick with mode: check = LocalBusiness markup, NAP, locations and the Business Profile (default). Needs url. reviews = Reply drafts for Google reviews, unhappy ones first, for the user's GBP connector after approval. Needs reviews[{rating, author, text, date, replied, review_id}]. demand = Business Profile search terms and geo-grid ranks into new service and location pages.
Paramètres, retour & exemple (12)
Paramètresurl· string · optionnel
The home page, a location page or the locations overview page.city· string · optionnel
Main city, left out when matching terms to pages.grid· array · optionnel
Optional geo-grid rankings.mode· string · optionnel · check | reviews | demand
Default check.pages· array · optionnel
The site's page URLs, e.g.terms· array · optionnel
Search terms from the Business Profile performance report.detail· string · optionnel · full | brief
brief = short summary.contact· string · optionnel
Where unhappy customers can reach you, e.g.reviews· array · optionnelbusiness· string · optionnel
Business name to sign with.memory_key· string · optionnel
site_memory key, records this call.gbp_profile· object · optionnel
Optional: the Google Business Profile of this location, from the user's GBP connector or typed by the user, to compare with the site.
Exemple d'appel{"name": "local", "arguments": {"url": "texte", "city": "texte", "grid": [], "mode": "check", "pages": [], "terms": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - measure≈ 710 tokens
Prove and measure with numbers from the user's Search Console, GA4, Ahrefs or Semrush, including numbers the user pastes. Use it instead of calculating by hand: it handles spelling variants, control groups and trends. Pick with mode: impact = Before and after fixes, against pages you did not touch. Needs pages[{url, before, after, changed, fix}]. ai_citations = AI citations before and after, per engine. Needs pages[{url, before, after, changed}]. ai_referrals = Visits from ChatGPT, Perplexity, Gemini and other assistants, from GA4. Needs rows[{source, sessions, landing_page, period, conversions, revenue}]. brand_split = Brand versus non-brand clicks and how each moved. Needs brand_terms, rows[{query, keyword, clicks, traffic, impressions, position}]. share_of_voice = Share of the clicks against competitors from rank rows. Needs your_domain, rows[{keyword, position, volume, domain, url, group}].
Paramètres, retour & exemple (13)
Paramètresdays· integer · optionnel
Length of each period in days.mode· string · optionnel · impact | ai_citations | ai_referrals | brand_split | share_of_voice
Default impact.rows· array · optionnelpages· array · optionneldetail· string · optionnel · full | brief
brief = short summary.source· string · optionnel
Where the counts come from, for example Ahrefs Brand Radar.fix_date· string · optionnel
Date the fixes went live, YYYY-MM-DD.watch_ids· array · optionnel
Optional watch ids, to list what changed on each page and when.fix_log_id· string · optionnel
Optional fix log from log_fix: takes the fix date from it and saves the result per fix, with a rollback plan for fixes that did worse.memory_key· string · optionnel
site_memory key, records this call.brand_terms· array · optionnel
Brand and product names, and misspellings.rows_before· array · optionnel
Optional same rows from an earlier period.your_domain· string · optionnel
Your domain, e.g. example.com.
Exemple d'appel{"name": "measure", "arguments": {"days": 1, "mode": "impact", "rows": [], "pages": [], "detail": "full", "source": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - plan≈ 835 tokens
Plans for migrations, experiments and the team. Pick with mode: redirects = Redirect map for a migration or URL change. split_test = SEO split test on a page template, with the Worker. Needs urls, field, pattern. sprint = Fixes into a week plan of tickets per role. Needs fixes[{title, url, detail, severity, impact, effort}].
Paramètres, retour & exemple (16)
Paramètresmode· string · optionnel · redirects | split_test | sprint
Default redirects.urls· array · optionnel
Pages of one template.field· string · optionnel · title | description
What to change.fixes· array · optionnelhours· object · optionnel
Hours per week per role, default 8 each.weeks· number · optionnel
Weeks to plan, default 4.clicks· array · optionnel
Optional clicks per page for a balanced split.detail· string · optionnel · full | brief
brief = short summary.format· string · optionnel · redirects | nginx | apache | nextjs | csv
Output format, default redirects (Cloudflare Pages and Netlify).pattern· string · optionnel
The new value with {title} or {description} as placeholders.new_site· string · optionnel
New site address, to read its sitemap instead of new_urls.new_urls· array · optionnelold_site· string · optionnel
Old site address, to read its sitemap instead of old_urls.old_urls· array · optionnelmemory_key· string · optionnel
site_memory key, records this call.start_date· string · optionnel
Optional planned start, YYYY-MM-DD.
Exemple d'appel{"name": "plan", "arguments": {"mode": "redirects", "urls": [], "field": "title", "fixes": [], "hours": {}, "weeks": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - prioritize_fixes≈ 788 tokens
Use when Search Console, GA4, Ahrefs or Semrush data is available, also to explain a traffic drop (pass clicks_previous): ranks the fixes by the traffic or revenue they can win. Rank SEO fixes by how much traffic they can win, using data from the user's other connected tools. With GA4, also pass each page's organic conversions (key events) or revenue, and fixes are ranked by the money they can bring instead of clicks.
Paramètres, retour & exemple (6)
Paramètrespages· array · requisdetail· string · optionnel · full | brief
brief = short summary.source· string · optionnel · gsc | ga4 | ahrefs | semrush | other
Where the numbers come from.audit_id· string · optionnel
Optional id of a finished site audit, so pages are not scanned again.currency· string · optionnel
Currency of revenue, for example EUR or USD.memory_key· string · optionnel
site_memory key, records this call.
Exemple d'appel{"name": "prioritize_fixes", "arguments": {"pages": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"mode": "revenue", "status": "partial", "actions": []}} - request_recrawl≈ 304 tokens
Get changed pages recrawled. Pick with mode: recrawl = Check pages are indexable, sitemap lastmod entries, IndexNow and Search Console steps (default). Needs urls. indexnow = Submit URLs to IndexNow, or set up the key. Needs urls.
Paramètres, retour & exemple (6)
Paramètreskey· string · optionnel
The site's IndexNow key (8 to 128 letters, digits or dashes).mode· string · optionnel · recrawl | indexnow
Default recrawl.urls· array · optionnel
Changed pages on one site.detail· string · optionnel · full | brief
brief = short summary.memory_key· string · optionnel
site_memory key, records this call.indexnow_key· string · optionnel
Optional IndexNow key that is live at /<key>.txt.
Exemple d'appel{"name": "request_recrawl", "arguments": {"key": "texte", "mode": "recrawl", "urls": [], "detail": "full", "memory_key": "texte", "indexnow_key": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - robots_txt≈ 357 tokens
robots.txt for search and AI crawlers. Pick with mode: test = Which crawlers may fetch a URL, and the rule that decides. Needs url. ai_policy = Rules per AI crawler: allow AI search, block training. Needs url, policy.
Paramètres, retour & exemple (7)
Paramètresurl· string · optionnel
Full address of the page, for example https://example.com/pricing.mode· string · optionnel · test | ai_policy
Default test.detail· string · optionnel · full | brief
brief = short summary.policy· string · optionnel · allow_all | search_only | block_training | block_all
Which AI crawlers to allow.memory_key· string · optionnel
site_memory key, records this call.robots_txt· string · optionnel
Optional robots.txt content to test instead of the live file.user_agents· array · optionnel
Crawler names, for example Googlebot, GPTBot, ClaudeBot, PerplexityBot.
Exemple d'appel{"name": "robots_txt", "arguments": {"url": "texte", "mode": "test", "detail": "full", "policy": "allow_all", "memory_key": "texte", "robots_txt": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - scan_page≈ 370 tokens
Scan a page for Google and AI search: 0-100 score, issues to fix first with why and how, AI readiness and key facts. Pick with mode: page = A live page by url (default). Needs url. html = Unpublished HTML before deploy, to gate a release. Needs html. deep = Everything measured on one page, by section. Needs url. rescan = Scan again after fixes and compare with the last scan. Needs url.
Paramètres, retour & exemple (6)
Paramètresurl· string · optionnel
Full address of the page, for example https://example.com/pricing.html· string · optionnel
The complete HTML document, up to 900 KB.mode· string · optionnel · page | html | deep | rescan
Default page.detail· string · optionnel · full | brief
brief = short summary.sections· array · optionnel
Sections to include. Default: all.memory_key· string · optionnel
site_memory key, records this call.
Exemple d'appel{"name": "scan_page", "arguments": {"url": "texte", "html": "texte", "mode": "page", "detail": "full", "sections": [], "memory_key": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - schema≈ 406 tokens
JSON-LD structured data for rich results. Pick with mode: generate = Write JSON-LD for a page: type Article, Product, FAQPage, Organization, BreadcrumbList, VideoObject, Event, Recipe, JobPosting, SoftwareApplication, ProfilePage or Course. Needs url. validate = Validate JSON-LD for rich results. Needs jsonld. product_page = Check an existing ecommerce product page (price, stock, merchant listing fields). To write Product JSON-LD use generate with type Product. Needs url.
Paramètres, retour & exemple (6)
Paramètresurl· string · optionnel
Full address of the page, for example https://example.com/pricing.mode· string · optionnel · generate | validate | product_page
Default generate.type· string · optionnel · auto | Article | Product | FAQPage | Organization | BreadcrumbList | VideoObject | Event
Schema type, default auto.detail· string · optionnel · full | brief
brief = short summary.jsonld· string · optionnel
The JSON-LD as text, with or without the <script> tag.memory_key· string · optionnel
site_memory key, records this call.
Exemple d'appel{"name": "schema", "arguments": {"url": "texte", "mode": "generate", "type": "auto", "detail": "full", "jsonld": "texte", "memory_key": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - share≈ 300 tokens
Send results where the team works. Pick with mode: link = A link to the visual report. Needs url. export = A Google Sheet, CSV, Slack message or one task per issue.
Paramètres, retour & exemple (6)
Paramètresurl· string · optionnel
Full address, for example https://example.com/pricing.mode· string · optionnel · link | export
Default link.detail· string · optionnel · full | brief
brief = short summary.audit_id· string · optionnel
A finished site audit from start_site_audit, to export the whole site.memory_key· string · optionnel
site_memory key, records this call.slack_webhook_url· string · optionnel
Optional https incoming webhook (Slack, Discord, Teams) to post the summary to.
Exemple d'appel{"name": "share", "arguments": {"url": "texte", "mode": "link", "detail": "full", "audit_id": "texte", "memory_key": "texte", "slack_webhook_url": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - site_audit≈ 918 tokens
Audit a whole site, step by step, and work with the result. Pick with mode: start = Start an audit of up to 25 pages; returns audit_id. Needs url. continue = Scan the next pages; call until complete. Issues by code, sections, average score. Needs audit_id. import = Turn a crawl from Screaming Frog, Ahrefs or Semrush (up to 500 pages) into an audit_id. Needs pages[{url, status, redirect_to, title, meta_description, h1}]. compare = What changed since the last audit, or against a competitor audit. Needs audit_id. report = A client-ready report page with a link. Needs audit_id.
Paramètres, retour & exemple (13)
Paramètresurl· string · optionnel
Full address, for example https://example.com.mode· string · optionnel · start | continue | import | compare | report
Default start.note· string · optionnel
Optional short note for the reader, shown at the top.brand· string · optionnel
Optional agency or team name to show instead of OnPage.dev.links· array · optionnel
Optional internal links, for link equity, orphans and internal link suggestions.pages· array · optionnel
One row per crawled page.detail· string · optionnel · full | brief
brief = short summary.source· string · optionnel
Where the rows come from, for example Screaming Frog or Ahrefs Site Audit.audit_id· string · optionnel
The id returned by start_site_audit.max_pages· integer · optionnel
How many pages to audit, default 10, at most 25.memory_key· string · optionnel
site_memory key, records this call.previous_audit_id· string · optionnel
Optional: the audit to compare with.competitor_audit_id· string · optionnel
Optional: a finished audit of a competitor's site, to compare the two sites side by side instead of over time.
Exemple d'appel{"name": "site_audit", "arguments": {"url": "texte", "mode": "start", "note": "texte", "brand": "texte", "links": [], "pages": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - site_memory≈ 412 tokens
A memory per site that every OnPage.dev tool writes to, across chats and clients. Open it first when working on a site over time. Pick with mode: open = Open or create the memory, bind it to this chat, get the brief and next steps (default). Needs url. next = The best next steps from everything recorded. timeline = What happened, newest first. note = Record a decision or context. Needs note. forget = Delete the memory (ask the user first). Needs memory_key.
Paramètres, retour & exemple (8)
Paramètresurl· string · optionnel
The site's home page.kind· string · optionnel · scan | audit | fix | measure | rank | alert | plan | contentmode· string · optionnel · open | next | timeline | note | forget
Default open.note· string · optionnellimit· number · optionneldetail· string · optionnel · full | brief
brief = short summary.memory_key· string · optionnel
The memory_key you got when the memory was created.share_learning· boolean · optionnel
Opt in (true) or out (false) of sharing anonymous results: only the fix type and the rounded lift, never the site, URLs or numbers.
Exemple d'appel{"name": "site_memory", "arguments": {"url": "texte", "kind": "scan", "mode": "open", "note": "texte", "limit": 1, "detail": "full"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - sitemap≈ 245 tokens
The XML sitemap. Pick with mode: check = Check the sitemap and a sample of its URLs. Needs url. generate = Write a sitemap from a page list or audit. Needs audit_id.
Paramètres, retour & exemple (5)
Paramètresurl· string · optionnel
The site's home page, or the sitemap URL itself.mode· string · optionnel · check | generate
Default check.detail· string · optionnel · full | brief
brief = short summary.audit_id· string · optionnel
A finished site audit.memory_key· string · optionnel
site_memory key, records this call.
Exemple d'appel{"name": "sitemap", "arguments": {"url": "texte", "mode": "check", "detail": "full", "audit_id": "texte", "memory_key": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - snippet≈ 325 tokens
How a page looks in Google and when shared, measured in pixels the way Google truncates. Use it instead of estimating title or description length. Pick with mode: search = Title and description as Google shows them; give title (and description) or a url to read them. social = Open Graph and X cards, and the share image. Needs url.
Paramètres, retour & exemple (6)
Paramètresurl· string · optionnel
Page to read the current title and description from, when no title is given.mode· string · optionnel · search | social
Default search.title· string · optionnel
Proposed title tag text.detail· string · optionnel · full | brief
brief = short summary.memory_key· string · optionnel
site_memory key, records this call.description· string · optionnel
Proposed meta description.
Exemple d'appel{"name": "snippet", "arguments": {"url": "texte", "mode": "search", "title": "texte", "detail": "full", "memory_key": "texte", "description": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - technical≈ 596 tokens
Technical checks across pages and logs. Pick with mode: hreflang = Hreflang across language versions, with the corrected tag set. Needs url. parameters = URL parameters and filters that waste crawl budget. duplicates = Duplicate and near-duplicate pages. Needs audit_id. extract = One value pulled from many pages. Needs urls. logs = Access logs: what Googlebot and AI crawlers really crawl, with IP verification. Needs log.
Paramètres, retour & exemple (12)
Paramètreslog· string · optionnel
Raw access log lines, one request per line.url· string · optionnel
Full address of one language version of the page.mode· string · optionnel · hreflang | parameters | duplicates | extract | logs
Default hreflang.urls· array · optionnel
Optional extra URLs, for example from server logs or Search Console.regex· string · optionnel
A regular expression; the first group is returned if there is one, otherwise the whole match.detail· string · optionnel · full | brief
brief = short summary.jsonld· string · optionnel
A JSON-LD path: the @type, then the properties, for example Product.offers.price or Article.author.name.audit_id· string · optionnel
Id of a completed site audit.selector· string · optionnel
CSS selector, for example .price, h1 or link[rel=canonical].attribute· string · optionnel
With selector: read this attribute instead of the text, for example href or content.memory_key· string · optionnel
site_memory key, records this call.sitemap_urls· array · optionnel
Optional: the URLs from the site's sitemap, to find pages bots never crawl.
Exemple d'appel{"name": "technical", "arguments": {"log": "texte", "url": "texte", "mode": "hreflang", "urls": [], "regex": "texte", "detail": "full"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - text_quality≈ 294 tokens
Readability and correct language. Pick with mode: readability = Readability that fits the page and the pages that rank. Needs url. spelling = Spelling and grammar errors in about 30 languages. Needs url.
Paramètres, retour & exemple (6)
Paramètresurl· string · optionnel
Your page.mode· string · optionnel · readability | spelling
Default readability.detail· string · optionnel · full | brief
brief = short summary.keyword· string · optionnel
Optional: the search term, for context.memory_key· string · optionnel
site_memory key, records this call.competitors· array · optionnel
Optional: top organic results for the keyword.
Exemple d'appel{"name": "text_quality", "arguments": {"url": "texte", "mode": "readability", "detail": "full", "keyword": "texte", "memory_key": "texte", "competitors": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - track_rankings≈ 885 tokens
Use for ongoing rank tracking without picking keywords by hand. Each run, fetch Search Console rows by query and page (last 7 or 28 days) and, if connected, the rows of Ahrefs Rank Tracker (rank-tracker-overview) or Semrush Position Tracking, plus GA4 conversions or revenue per landing page if available, and pass them with the tracker_id (leave it out on the first run to create a tracker).
Paramètres, retour & exemple (11)
Paramètressite· string · optionnel
Your site. Needed on the first run.action· string · optionnel · run | status | stop
run (default), status or stop.detail· string · optionnel · full | brief
brief = short summary.gsc_rows· array · optionnel
Search Console rows by query and page for the period.fix_log_id· string · optionnel
Optional fix log (log_fix) whose pages count as work done.memory_key· string · optionnel
site_memory key, records this call.tracker_id· string · optionnel
From the first run. Leave out to create a tracker.conversions· array · optionnel
Optional GA4 key events or revenue per landing page.webhook_url· string · optionnel
Optional https webhook for the changes (Slack and Discord work).tracker_rows· array · optionnel
Ahrefs Rank Tracker or Semrush Position Tracking rows.money_keywords· array · optionnel
Optional keywords you always want followed.
Exemple d'appel{"name": "track_rankings", "arguments": {"site": "texte", "action": "run", "detail": "full", "gsc_rows": [], "fix_log_id": "texte", "memory_key": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"runs": 1, "events": [], "groups": {}, "trackerId": "texte"}} - tracking≈ 428 tokens
Whether analytics and consent are set up right, and whether the numbers add up. Pick with mode: ga4 = GA4 tags, events and duplicates. Needs url. consent = Cookie banner and Consent Mode v2. Needs url. gsc_vs_ga4 = Search Console clicks against GA4 sessions per page: broken or filtered tracking. Needs gsc[{page, clicks}], ga4[{landing_page, sessions}].
Paramètres, retour & exemple (6)
Paramètresga4· array · optionnel
GA4 sessions per landing page, organic Google only.gsc· array · optionnel
Search Console clicks per page.url· string · optionnel
Full address of the page, for example https://example.com/.mode· string · optionnel · ga4 | consent | gsc_vs_ga4
Default ga4.detail· string · optionnel · full | brief
brief = short summary.memory_key· string · optionnel
site_memory key, records this call.
Exemple d'appel{"name": "tracking", "arguments": {"ga4": [], "gsc": [], "url": "texte", "mode": "ga4", "detail": "full", "memory_key": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - watch≈ 701 tokens
Monitoring that runs on its own and posts changes to a webhook. Each kind takes action create (default), status or stop where it applies. Pick with mode: page = Watch one page (or a competitor page with competitor_of) for SEO changes. Needs url. page_status = Latest result of a page watch. Needs watch_id. page_stop = Stop a page watch. Needs watch_id. site_audit = Audit the whole site every 1, 7 or 30 days and alert on regressions. guard = Every 6 hours: robots.txt, sitemap, https, noindex and canonical on key pages, for deploy accidents. competitors = Weekly new, updated and removed pages from competitors' sitemaps, flagged by your topics.
Paramètres, retour & exemple (15)
Paramètresurl· string · optionnel
Full address, for example https://example.com/pricing.mode· string · optionnel · page | page_status | page_stop | site_audit | guard | competitors
Default page.pages· array · optionnel
Key pages to guard besides the home page (money pages first).action· string · optionnel · create | status | stop
create (default), status or stop.detail· string · optionnel · full | brief
brief = short summary.topics· array · optionnel
Your topics or keywords, to flag overlapping pages.guard_id· string · optionnel
For status and stop.watch_id· string · optionnel
For status and stop.max_pages· number · optionnel
Pages per audit, default 25.every_days· number · optionnel · 1 | 7 | 30
How often, default 7.memory_key· string · optionnel
site_memory key, records this call.competitors· array · optionnel
Competitor home pages.schedule_id· string · optionnel
For status and stop.webhook_url· string · optionnel
Optional https URL that receives a JSON POST when something changes, for example a Slack or Discord incoming webhook.competitor_of· string · optionnel
Optional: your own page.
Exemple d'appel{"name": "watch", "arguments": {"url": "texte", "mode": "page", "pages": [], "action": "create", "detail": "full", "topics": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - web_vitals≈ 262 tokens
Core Web Vitals from real Chrome users. Pick with mode: now = The latest field data for a page or site. Needs url. trend = Weekly history, before and after a change date. Needs url.
Paramètres, retour & exemple (5)
Paramètresurl· string · optionnel
Full address of the page, for example https://example.com/pricing.mode· string · optionnel · now | trend
Default now.detail· string · optionnel · full | brief
brief = short summary.memory_key· string · optionnel
site_memory key, records this call.change_date· string · optionnel
Optional date a speed fix went live, YYYY-MM-DD.
Exemple d'appel{"name": "web_vitals", "arguments": {"url": "texte", "mode": "now", "detail": "full", "memory_key": "texte", "change_date": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]}
C'est votre serveur ?
Revendiquez-le sur l'espace créateur (preuve GitHub, domaine ou npm) pour afficher le badge « propriétaire vérifié » et lancer un pentest comportemental à la demande afin d'obtenir le badge « Vérifié ».