# MetricSpot
> SEO and AI-readability audits with white-label PDF reports for agencies. Audit any URL across five score modules (Technical SEO, On-page, Performance, AI-readability, Modern SEO 2026), generate branded PDFs in English or Spanish, and send to clients in minutes.
## For AI agents
MetricSpot ships an MCP (Model Context Protocol) server so agents can run audits directly. Streamable HTTP at the URL below, stdio via `npx @metricspot/mcp-server` for local clients.
- Mcp-endpoint: https://mcp.metricspot.com
- Mcp-protocol-version: 2025-03-26
- Mcp-stdio-install: `npx @metricspot/mcp-server` (https://www.npmjs.com/package/@metricspot/mcp-server)
- Mcp-registry: com.metricspot/seo-mcp (https://registry.modelcontextprotocol.io/v0.1/servers?search=com.metricspot)
- Mcp-manifest: https://mcp.metricspot.com/.well-known/mcp-manifest
- Full agent integration guide: https://metricspot.com/AGENTS.md
### Tools
- `run_audit_anonymous`: Run a one-shot audit on any public URL. 1 per IP per 24 hours, no auth.
- `run_audit`: Queue a full audit including Core Web Vitals. Counts against the user's plan allowance. Returns audit_id, poll get_audit.
- `get_audit`: Fetch a previously-run audit by id. Returns module scores, total score, findings with severity and recommendation.
- `list_audits`: List the user's audits with id, URL, score, created_at, status. Paginated, default 24, max 100.
- `get_audit_pdf`: Return a signed download URL for the branded PDF report. Queues a render if no PDF exists yet.
- `get_organic_traffic`: If GA4 and Google Search Console are linked, return the 28-day organic traffic snapshot for an audit.
## Sample audit response
Shape of a successful `run_audit_anonymous` response. Module scores are 0 to 100, severity is one of info, minor, major, critical.
```json
{
"audit_id": "aud_01HZX8YB6K3M2Q",
"url": "https://example.com",
"status": "complete",
"total_score": 78,
"module_scores": {
"technical": 88,
"onpage": 72,
"performance": 64,
"ai": 81,
"modern_seo": 75,
"social": 90,
"accessibility": 82,
"privacy": 70,
"readability": 79,
"tech_stack": 100
},
"findings": [
{
"module": "ai",
"rule_id": "llms_txt",
"passed": false,
"severity": "minor",
"title": "No /llms.txt manifest found",
"recommendation": "Publish an /llms.txt at the site root so LLM crawlers can identify canonical pages.",
"docs_url": "https://metricspot.com/docs/llms-txt-for-ai-agents/"
},
{
"module": "performance",
"rule_id": "lcp",
"passed": false,
"severity": "major",
"title": "Largest Contentful Paint exceeds 2.5s",
"recommendation": "Optimize the hero image and defer non-critical JS to bring LCP under 2.5s on mobile.",
"docs_url": "https://metricspot.com/docs/lcp/"
}
],
"report_url": "https://app.metricspot.com/audits/aud_01HZX8YB6K3M2Q",
"pdf_url": null,
"created_at": "2026-05-13T14:22:08Z"
}
```
## Pricing
Three tiers. Anonymous agents get 1 audit per IP per 24 hours; signed-up users get plan-based monthly allowances.
- Free ($0/mo): 10 audits per month, all ten score modules, PDF with our branding.
- Starter ($29/mo): 50 audits per month, up to 5 tracked domains, fully white-label PDF, custom brand kit.
- Pro ($49/mo): unlimited audits, unlimited tracked domains, scheduled re-audits, email reports to clients.
[Full pricing](https://metricspot.com/pricing/)
## Product
- [Features](https://metricspot.com/features/)
- [Pricing](https://metricspot.com/pricing/)
- [White label](https://metricspot.com/features/white-label-seo-tools/): white-label SEO audit tool for agencies. Branded PDF reports in 6 languages, embeddable audit widget, 90+ checks per audit.
- [AI search visibility](https://metricspot.com/features/ai-search-visibility-tools/): AI SEO audit tool. Scores how ChatGPT, Perplexity, and Google AI Overviews can read and cite your site (llms.txt, agents.txt, schema, answer-first content, author signals).
- [Competitor comparison](https://metricspot.com/features/competitor-comparison/): audit your site against up to 3 competitors. 91-rule side-by-side diff with a 'where you beat them' breakdown, branded PDF on Pro.
- [SEO API](https://metricspot.com/features/seo-api/): REST API to run the 154-rule SEO + AI-readability audit from any HTTPS client. Flat $49/mo Pro, 5,000 calls/month, anonymous tier for 1 audit/IP/24h.
- [SEO MCP server](https://metricspot.com/features/seo-mcp-server/): MCP server for AI agents (Claude Code, Cursor, ChatGPT). Same audit engine and Bearer keys as the REST API.
## Company
- [Blog](https://metricspot.com/blog/)
- [Contact](https://metricspot.com/contact/) - support@metricspot.com
- [Affiliates](https://metricspot.com/affiliates/)
- [Privacy](https://metricspot.com/privacy/)
- [Terms](https://metricspot.com/terms/)
## App
- Login: https://app.metricspot.com/login?lang=en
- Sign up: https://app.metricspot.com/signup?lang=en
## Docs
Reference for every check MetricSpot runs on a website. What each one does, why it matters, how to fix it. [Full docs index](https://metricspot.com/docs/).
### Technical SEO checks
- [Block clickjacking with frame-ancestors](https://metricspot.com/docs/clickjacking-protection/): MetricSpot checks for X-Frame-Options or CSP frame-ancestors. These headers stop attackers from embedding your site in a hidden iframe to trick users into clicking.
- [Canonical tags](https://metricspot.com/docs/canonical-tags/): MetricSpot checks for a `` declaring this page's preferred URL. Without it, duplicate URLs split your SEO authority.
- [DMARC policy](https://metricspot.com/docs/dmarc-policy/): MetricSpot reads your `_dmarc` DNS record. Without DMARC, anyone can send email 'from you' undetected - your domain is open for spoofing.
- [Enable HSTS](https://metricspot.com/docs/enable-hsts/): MetricSpot checks for a Strict-Transport-Security header. HSTS forces browsers to use HTTPS on every visit, closing a downgrade-attack window left open by plain HTTPS.
- [Favicon](https://metricspot.com/docs/favicon/): MetricSpot looks for a favicon link in the page. Browsers, bookmarks, tab strips, and SERPs use it to identify your site visually.
- [HSTS preload](https://metricspot.com/docs/hsts-preload/): Checks whether your domain is on the Chromium HSTS preload list, which forces HTTPS from the very first browser request - closing the gap plain HSTS leaves open.
- [HTTP 200 status code](https://metricspot.com/docs/http-200-status-code/): MetricSpot checks the HTTP status of the audited URL. Anything other than 2xx - a redirect chain, a 404, a 500 - means crawlers skip the page and it cannot rank.
- [HTTPS on your site](https://metricspot.com/docs/https-on-your-site/): MetricSpot checks that your site is served over HTTPS. Sites without it are flagged 'Not secure' in browsers and lose ranking weight in Google.
- [Keep redirect chains short](https://metricspot.com/docs/redirect-chains/): MetricSpot counts how many redirects a visitor follows before reaching the final URL. Long chains add latency, leak PageRank, and risk Googlebot abandoning the crawl.
- [Redirect HTTP to HTTPS](https://metricspot.com/docs/redirect-http-to-https/): MetricSpot checks whether http:// requests are 301-redirected to https://. Without it your site has two indexable copies - and a downgrade window for every first-time visitor.
- [robots.txt file](https://metricspot.com/docs/robots-txt-file/): MetricSpot checks for /robots.txt at the root of your domain. It's the first file every crawler fetches - its absence isn't fatal, but it's a missed signal.
- [Serve a real 404, not a soft-404](https://metricspot.com/docs/custom-404-page/): MetricSpot requests a random non-existent URL and checks the status. Soft-404s (200 OK on a "not found" page) bloat the index with junk URLs and confuse crawlers.
- [Set the viewport meta tag](https://metricspot.com/docs/viewport-meta-tag/): MetricSpot checks for . Without it, mobile browsers render at 980px desktop width and zoom out - failing Google's mobile usability check.
- [Sitemap in robots.txt](https://metricspot.com/docs/sitemap-in-robots-txt/): MetricSpot checks robots.txt for a Sitemap: line. It's how Google, Bing, and most AI crawlers auto-discover your sitemap without you submitting it manually.
- [Use hreflang for international SEO](https://metricspot.com/docs/hreflang-tags/): MetricSpot counts tags. They tell Google which URL serves which language or region, so the right one ranks in each market.
- [XML sitemap](https://metricspot.com/docs/xml-sitemap/): MetricSpot tries to fetch /sitemap.xml. The sitemap is how you tell search engines and AI crawlers which URLs on your site exist and matter.
### On-page SEO checks
- [Add a meta description tag](https://metricspot.com/docs/meta-description-tag/): MetricSpot checks for . Search engines display it as the snippet under your link - without one they auto-generate text that may not sell the page.
- [Declare the page language](https://metricspot.com/docs/declare-page-language/): MetricSpot checks for a valid lang attribute on . Without it, screen readers mispronounce, hreflang loses its anchor, and translation tools guess.
- [H1 tag](https://metricspot.com/docs/h1-tag/): MetricSpot checks that your page has exactly one H1. Zero is a missed ranking signal; multiple H1s dilute the page's topic.
- [Image alt text](https://metricspot.com/docs/image-alt-text/): MetricSpot checks how many of your `` tags have non-empty alt attributes. Missing alts mean blind users hear nothing and Google sees nothing.
- [Internal links on page](https://metricspot.com/docs/internal-links-on-page/): MetricSpot counts how many same-domain links the page contains. Too few, and pages get stranded with no crawl path and no PageRank flow.
- [Meta description length](https://metricspot.com/docs/meta-description-length/): MetricSpot checks that your meta description is between roughly 110 and 160 characters - long enough to be useful, short enough not to be truncated in Google results.
- [Optimal title length](https://metricspot.com/docs/optimal-title-length/): MetricSpot checks that your page title is between roughly 40 and 65 characters. Too short and you waste a ranking slot; too long and Google truncates it in search results.
- [Page word count](https://metricspot.com/docs/page-word-count/): MetricSpot counts the prose words on the page. Thin pages rank poorly because there's not enough content for search engines to score relevance against.
- [Set a
tag on every page](https://metricspot.com/docs/page-title-tag/): MetricSpot checks for a non-empty in the page head. It's the strongest on-page ranking signal and the headline of every search result, browser tab, and shared-link card.
- [Use a clean heading hierarchy](https://metricspot.com/docs/heading-hierarchy/): MetricSpot walks H1 → H2 → H3 in source order and flags skipped levels. A broken outline confuses screen readers and weakens the on-page topic signal.
### Performance checks (Core Web Vitals)
- [Cumulative Layout Shift (CLS)](https://metricspot.com/docs/cumulative-layout-shift/): CLS measures how much your page jumps around as it loads. Google's 'good' threshold is 0.1 - higher than that, your readers misclick buttons and bounce.
- [Interaction to Next Paint (INP)](https://metricspot.com/docs/interaction-to-next-paint/): INP measures how responsive your page feels - the lag between a click, tap, or keypress and the screen updating. Google's threshold is 200 ms.
- [Largest Contentful Paint (LCP)](https://metricspot.com/docs/largest-contentful-paint/): LCP measures how fast the biggest visible element on your page appears. Google's threshold for 'good' is 2.5 seconds - slower than that, you lose ranking and conversions.
- [Lighthouse performance score](https://metricspot.com/docs/lighthouse-performance-score/): MetricSpot pulls the PageSpeed Insights performance score for the page. Combines lab metrics for paint, interactivity, and layout stability into a 0–100.
- [PageSpeed Insights unavailable](https://metricspot.com/docs/pagespeed-insights-unavailable/): Informational warning when Google PageSpeed Insights couldn't return data. Every other performance check depends on PSI - when it goes dark, so do they.
- [Real-user CLS (field data)](https://metricspot.com/docs/field-cumulative-layout-shift/): CLS from real Chrome users over the last 28 days (75th-percentile). Captures dynamic shifts the lab can't reproduce - late ads, fonts, A/B variants.
- [Real-user LCP (field data)](https://metricspot.com/docs/field-largest-contentful-paint/): LCP from real Chrome users over the last 28 days (75th-percentile). The metric Google actually ranks on - Lighthouse lab numbers are just a proxy.
- [Real-user TTFB (field data)](https://metricspot.com/docs/field-time-to-first-byte/): TTFB from real Chrome users over the last 28 days (75th-percentile). Wait between request and first byte - captures real network and server delays.
- [Server response time](https://metricspot.com/docs/server-response-time/): MetricSpot measures TTFB - time to first byte. Slow server response caps every other performance metric; LCP cannot be fast if TTFB is two seconds.
### AI-readability checks
- [Allow AI crawlers in robots.txt](https://metricspot.com/docs/allow-ai-crawlers/): MetricSpot reads robots.txt to see whether GPTBot, ClaudeBot, PerplexityBot, Google-Extended, and other AI crawlers are allowed to index your content.
- [Answer first content](https://metricspot.com/docs/answer-first-content/): MetricSpot counts the words in your page's first paragraph. Answer engines and humans both skim the lead - bury the answer and you lose both.
- [Author attribution](https://metricspot.com/docs/author-attribution/): MetricSpot looks for an `author` field in your Article schema. Named authors lift E-E-A-T - a real ranking signal since Google's helpful-content updates.
- [Content type schema](https://metricspot.com/docs/content-type-schema/): MetricSpot checks for a JSON-LD `@type` that matches what the page actually is - Article, Product, HowTo, FAQPage, etc. Without it, AI agents have to guess.
- [Declare a policy in /agents.txt](https://metricspot.com/docs/agents-txt/): MetricSpot looks for /agents.txt - a new draft standard for telling autonomous AI agents what your site allows, what it costs, and where the action endpoints are.
- [Identify your site with Organization schema](https://metricspot.com/docs/organization-schema/): MetricSpot looks for an Organization (or Person) JSON-LD block. It tells search engines and AI who's behind the site - required for the Google Knowledge Graph card.
- [JSON-LD structured data](https://metricspot.com/docs/json-ld-structured-data/): MetricSpot counts the JSON-LD blocks on your page. Structured data is how you tell Google and AI agents what a page is (article, product, FAQ, organization) - not just what it says.
- [llms.txt for AI agents](https://metricspot.com/docs/llms-txt/): MetricSpot checks for /llms.txt at the root of your domain. It's an emerging convention for sites to publish a curated summary that LLM agents can read instead of scraping.
- [Mark up FAQs with FAQPage schema](https://metricspot.com/docs/faq-schema/): MetricSpot checks whether your FAQ section is wrapped in FAQPage JSON-LD. Marked-up Q&A pairs are eligible for rich results in Google and direct citations in answer engines.
- [Semantic HTML](https://metricspot.com/docs/semantic-html/): MetricSpot measures the ratio of meaningful HTML5 elements (article, section, nav, header, footer, main) to generic div/span. Semantic markup is how AI agents and screen readers understand page structure.
- [Visible last-updated date](https://metricspot.com/docs/visible-last-updated-date/): MetricSpot checks for a human-visible 'Updated on …' line near the title. AI agents weight freshness heavily - undated pages get skipped for time-sensitive queries.
### Modern SEO checks (E-E-A-T)
- [Author byline](https://metricspot.com/docs/author-byline/): MetricSpot looks for a visible 'By [name]' attribution on article-style pages. Visible bylines pair with author schema for stronger E-E-A-T.
- [Build an internal linking strategy](https://metricspot.com/docs/internal-linking-strategy/): MetricSpot counts the internal links on a page. Healthy internal linking distributes PageRank across your site and gives Googlebot more crawl paths to follow.
- [Content depth](https://metricspot.com/docs/content-depth/): MetricSpot infers your page's intent (guide, tutorial, comparison, etc.) from its title, then checks the word count against the typical depth for that intent.
- [Domain age](https://metricspot.com/docs/domain-age/): MetricSpot looks up your domain's registration date via RDAP. Older domains accrue trust; new domains need stronger on-page signals to compete.
- [Organization sameAs](https://metricspot.com/docs/organization-sameas/): MetricSpot counts the `sameAs` URLs in your Organization JSON-LD. Each link merges your brand entity in Google's Knowledge Graph and AI agent indexes.
- [Page authority](https://metricspot.com/docs/page-authority/): MetricSpot queries the Open PageRank API for a 0–10 score derived from the public backlink graph. Use it as a directional authority signal.
- [Section density](https://metricspot.com/docs/section-density/): MetricSpot measures the ratio of H2/H3 sections to total word count. Long-form pages need roughly one H2 per 150–250 words to stay skimmable.
- [Title click-through rate](https://metricspot.com/docs/title-click-through-rate/): MetricSpot heuristically scores your `` for CTR hooks - numbers, a year, brackets, questions, power words. Title rewrites are one of the fastest-moving SEO levers.
- [Trust pages](https://metricspot.com/docs/trust-pages/): MetricSpot checks for footer links to About, Contact, Privacy, and Terms. Google's quality raters score for these; AI agents read them as authenticity signals.
- [Write clean, readable URL slugs](https://metricspot.com/docs/seo-friendly-url-slug/): MetricSpot checks the URL slug for length, separators, and whether it reads like real words. Clean slugs (/seo-guide) outperform IDs (/page?id=123) for clicks and indexing.
### Social and Open Graph checks
- [Add an Open Graph image](https://metricspot.com/docs/open-graph-image/): MetricSpot checks for an og:image meta tag. Without one, links to your page render as bare URLs on Facebook, LinkedIn, Slack, X, iMessage, and WhatsApp.
- [Add the Open Graph core tags](https://metricspot.com/docs/open-graph-core-tags/): MetricSpot looks for og:title, og:description, og:image, and og:url. Without them, Facebook, LinkedIn, Slack, and WhatsApp render shared links as bare URLs.
- [Add Twitter / X Card tags](https://metricspot.com/docs/twitter-card-tags/): MetricSpot looks for twitter:card and twitter:image meta tags. They let X render a big preview card when your URL is posted, instead of a bare link.
- [Apple touch icon](https://metricspot.com/docs/apple-touch-icon/): MetricSpot looks for ``. iOS uses it when users add your site to the home screen - without it, they get a blurry screenshot.
- [Link to social profiles](https://metricspot.com/docs/link-to-social-profiles/): MetricSpot scans for outbound links to your social profiles in the header, footer, or contact block. Visible profile links are an E-E-A-T signal and help AI agents confirm the brand is real.
- [sameAs profile match](https://metricspot.com/docs/sameas-profile-match/): MetricSpot fetches every URL in your sameAs array and verifies it returns 200 and mentions your brand. Broken sameAs targets break Knowledge Graph entity merging.
- [sameAs social profiles](https://metricspot.com/docs/sameas-social-profiles/): MetricSpot checks your Organization JSON-LD for a sameAs array of social URLs. This is what feeds Google's Knowledge Graph and AI-agent entity resolution.
- [Social profile diversity](https://metricspot.com/docs/social-profile-diversity/): MetricSpot counts how many distinct social platforms you link to and checks the mix fits your audience. A single-channel presence is a weak trust signal.
- [Theme color meta tag](https://metricspot.com/docs/theme-color-meta/): MetricSpot checks for the theme-color meta tag. It tints the mobile browser chrome, PWA title bars, and tab strips - a 30-second fix that makes a site feel intentional.
- [Web app manifest](https://metricspot.com/docs/web-app-manifest/): MetricSpot checks for a linked web app manifest. It's required for Android install prompts, the tab-strip icon, and modern PWA behavior across Chromium browsers.
### Accessibility checks
- [ARIA landmarks](https://metricspot.com/docs/aria-landmarks/): MetricSpot checks for landmark regions (main, nav, header, footer, aside) so screen-reader users can skip directly to the content instead of every link in the menu.
- [HTML lang for screen readers](https://metricspot.com/docs/html-lang-for-screen-readers/): MetricSpot reads the `lang` attribute on ``. Without it, screen readers pick the wrong pronunciation voice and assistive tech can't switch languages.
- [Label every form input](https://metricspot.com/docs/form-input-labels/): MetricSpot checks every form input for an associated