get_site_health

get_site_health MCP tool: technical health of the site at its latest monthly crawl. Scores per severity level, fixes with their page count, and changes since the previous crawl.

Updated 2026-10-19

get_site_health returns the technical health of the project's site at its latest monthly crawl: one score per severity level, every fix found (one fix = one check, across all the pages it touches) from the most to the least urgent, and what changed since the previous crawl. It is the same diagnostic as the Site health page of the dashboard.

When to use

Start here when an agent needs to know whether the site itself keeps Google and AI engines from reading or citing it: AI robots blocked, pages that only render with JavaScript, broken canonicals, missing structured data, duplicate titles. Then read the pages and the way to fix each issue with list_site_issues, and the order to fix them in with list_priority_pages.

Input

Field Type Default Description
projectId string (CUID) required Project scope.

Response

No diagnostic yet

{ "success": true, "state": "running", "running": true }

state is none (the site was never crawled), running (the first crawl or its diagnostic is in progress) or failed (the last crawl failed).

Ready

{
  "success": true,
  "state": "ready",
  "running": false,
  "crawl": {
    "id": "cmg8a1k2p0001l70f3b9c4d2e",
    "checkedAt": "2026-10-01T04:12:00.000Z",
    "pageCount": 212,
    "pagesDiscovered": 230,
    "maxPages": 250
  },
  "scores": [
    { "level": "BLOCKING", "score": 100, "fixes": 0 },
    { "level": "AI_IMPACT", "score": 64, "fixes": 5 },
    { "level": "CONSISTENCY", "score": 91, "fixes": 2 },
    { "level": "SEO_HYGIENE", "score": 72, "fixes": 6 }
  ],
  "comparison": { "previousAt": "2026-09-01T04:10:00.000Z", "fixed": 4, "added": 1 },
  "fixes": [
    {
      "check": "jsonld-missing",
      "title": "No structured data for this kind of page",
      "level": "AI_IMPACT",
      "pages": 18,
      "siteWide": false,
      "isNew": false
    },
    {
      "check": "title-duplicate",
      "title": "Same title on several pages",
      "level": "SEO_HYGIENE",
      "pages": 34,
      "siteWide": false,
      "isNew": true
    }
  ]
}
  • running: a new crawl is in progress. The diagnostic shown stays the previous one until it ends.
  • crawl.pageCount: pages kept in the diagnostic. pagesDiscovered versus maxPages tells whether the plan's page limit cut the crawl.
  • scores: one score out of 100 per level. BLOCKING (engines cannot read or index the pages), AI_IMPACT, CONSISTENCY (facts that contradict each other), SEO_HYGIENE (Google and Bing, whose index AI engines search).
  • comparison: causes fixed and causes added since the previous crawl. null on the first diagnostic.
  • fixes: from the most to the least urgent. check is a stable machine code, title is in English, pages counts the pages touched, siteWide marks an issue of the whole site (robots.txt, a missing About page). Every fix is open: its pages and the way to fix it are in list_site_issues.

Tips and patterns

  • Blocking first. A BLOCKING fix always comes first: nothing else matters while engines cannot read the pages.
  • Fix the cause once. A fix with many pages usually comes from one template: read its pages with list_site_issues and filters.check, then fix the template.
  • Monthly rhythm. The site is crawled once a month. Calling this tool more often returns the same diagnostic until the next crawl.

Related tools

You can see where you stand today.

Free trial. Start tracking your AI visibility, no credit card.