Skip to main content
Glama
AutomateLab-tech

automatelab-ai-seo

Official

Check XML sitemap health

check_sitemap
Read-onlyIdempotent

Validate a domain's XML sitemap: check presence, accessibility, URL count, lastmod freshness, sitemap indexes, and image/video extensions. Use for site-wide indexing audits before crawling.

Instructions

Validate a domain's XML sitemap: presence, accessibility, URL count, lastmod freshness, sitemap-index handling, and image/video sitemap extensions.

Read-only. Issues N+1 HTTP GETs: one for robots.txt + sitemap, then up to max_urls_to_check HEADs against sampled URLs.

Deterministic, rule-based; no LLM.

When to use: site-wide indexing audits. Pair with check_robots for a full pre-crawl picture. For per-page checks, use audit_page or check_technical instead.

Input Schema

NameRequiredDescriptionDefault
domainYesHostname or origin to inspect. Examples: `example.com`, `https://example.com`. The tool tries `/sitemap.xml` then the sitemap URL declared in robots.txt; follows sitemap index files one level deep. Read-only HTTP GETs against the domain only.
max_urls_to_checkNoCap on how many URLs from the sitemap to sample for lastmod, image/video extension, and structural checks. Default 100. Increase up to 500 for large sites where you want a more representative sample; each extra URL is one HTTP HEAD.

Output Schema

NameRequiredDescriptionDefault
statusYes
findingsYes
stale_urlsYes
total_urlsYes
sitemap_urlYes
sitemap_indexYes
has_image_sitemapYes
has_video_sitemapYes
urls_with_lastmodYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed27 schema fields changed
    • removedOutput schema / properties / domain
      Removed value: -{
      -  "description": "The hostname the sitemap was checked for.",
      -  "type": "string"
      -}
    • removedOutput schema / properties / fetched_at
      Removed value: -{
      -  "description": "UTC ISO-8601 timestamp of the check.",
      -  "type": "string"
      -}
    • removedOutput schema / properties / findings / items / properties / category / description
      Removed value: -"Finding category - which AI-SEO dimension it relates to."
    • addedOutput schema / properties / findings / items / properties / estimated_impact / anyOf
      Added value: +[
      +  {
      +    "not": {}
      +  },
      +  {
      +    "const": "high",
      +    "type": "string"
      +  },
      +  {
      +    "const": "medium",
      +    "type": "string"
      +  },
      +  {
      +    "const": "low",
      +    "type": "string"
      +  }
      +]
    • removedOutput schema / properties / findings / items / properties / estimated_impact / description
      Removed value: -"Estimated impact on AI citation probability when resolved."
    • removedOutput schema / properties / findings / items / properties / estimated_impact / enum
      Removed value: -[
      -  "high",
      -  "medium",
      -  "low"
      -]
    • removedOutput schema / properties / findings / items / properties / estimated_impact / type
      Removed value: -"string"
    • addedOutput schema / properties / findings / items / properties / failure_signal / anyOf
      Added value: +[
      +  {
      +    "not": {}
      +  },
      +  {
      +    "type": "string"
      +  }
      +]
    • removedOutput schema / properties / findings / items / properties / failure_signal / description
      Removed value: -"Falsifiability: the observable signal that would prove the fix did NOT work."
    • removedOutput schema / properties / findings / items / properties / failure_signal / type
      Removed value: -"string"
    • removedOutput schema / properties / findings / items / properties / fix / description
      Removed value: -"Concrete, copy-pasteable fix."
    • addedOutput schema / properties / findings / items / properties / leading_indicator / anyOf
      Added value: +[
      +  {
      +    "not": {}
      +  },
      +  {
      +    "type": "string"
      +  }
      +]
    • removedOutput schema / properties / findings / items / properties / leading_indicator / description
      Removed value: -"Falsifiability: the leading indicator to monitor to confirm the fix is landing."
    • removedOutput schema / properties / findings / items / properties / leading_indicator / type
      Removed value: -"string"
    • removedOutput schema / properties / findings / items / properties / message / description
      Removed value: -"Human-readable description of the issue."
    • removedOutput schema / properties / findings / items / properties / severity / description
      Removed value: -"Triage priority: critical blocks AI citation, warning hurts probability, info is nice-to-have."
    • removedOutput schema / properties / findings / items / properties / where / description
      Removed value: -"Location of the issue (CSS selector, JSON-LD path, robots.txt line, or 'page-level')."
    • addedOutput schema / properties / has_image_sitemap
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / has_video_sitemap
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / sitemap_index
      Added value: +{
      +  "type": "boolean"
      +}
    • removedOutput schema / properties / sitemap_url / description
      Removed value: -"Resolved sitemap URL (null when status != found)."
    • changedOutput schema / properties / sitemap_url / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +[
      +  "null",
      +  "string"
      +]
    • addedOutput schema / properties / stale_urls
      Added value: +{
      +  "type": "number"
      +}
    • removedOutput schema / properties / status / description
      Removed value: -"Outcome of the sitemap lookup."
    • removedOutput schema / properties / total_urls / description
      Removed value: -"Total URLs declared across the sitemap (and indexed children)."
    • removedOutput schema / properties / urls_with_lastmod / description
      Removed value: -"Count of URLs that carry a lastmod attribute."
    • changedOutput schema / required
      Previous value: -[
      -  "domain",
      -  "fetched_at",
      -  "status",
      -  "sitemap_url",
      -  "total_urls",
      -  "urls_with_lastmod",
      -  "findings"
      -]New value: +[
      +  "sitemap_url",
      +  "status",
      +  "total_urls",
      +  "urls_with_lastmod",
      +  "stale_urls",
      +  "has_image_sitemap",
      +  "has_video_sitemap",
      +  "sitemap_index",
      +  "findings"
      +]
  2. Changed1 schema field changedv1.0.0
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "domain": {
      +      "description": "The hostname the sitemap was checked for.",
      +      "type": "string"
      +    },
      +    "fetched_at": {
      +      "description": "UTC ISO-8601 timestamp of the check.",
      +      "type": "string"
      +    },
      +    "findings": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "category": {
      +            "description": "Finding category - which AI-SEO dimension it relates to.",
      +            "enum": [
      +              "schema",
      +              "robots",
      +              "technical",
      +              "freshness",
      +              "structure",
      +              "authority",
      +              "presence",
      +              "sitemap",
      +              "llms_txt",
      +              "citation",
      +              "evidence",
      +              "trust",
      +              "entity",
      +              "content"
      +            ],
      +            "type": "string"
      +          },
      +          "estimated_impact": {
      +            "description": "Estimated impact on AI citation probability when resolved.",
      +            "enum": [
      +              "high",
      +              "medium",
      +              "low"
      +            ],
      +            "type": "string"
      +          },
      +          "failure_signal": {
      +            "description": "Falsifiability: the observable signal that would prove the fix did NOT work.",
      +            "type": "string"
      +          },
      +          "fix": {
      +            "description": "Concrete, copy-pasteable fix.",
      +            "type": "string"
      +          },
      +          "leading_indicator": {
      +            "description": "Falsifiability: the leading indicator to monitor to confirm the fix is landing.",
      +            "type": "string"
      +          },
      +          "message": {
      +            "description": "Human-readable description of the issue.",
      +            "type": "string"
      +          },
      +          "severity": {
      +            "description": "Triage priority: critical blocks AI citation, warning hurts probability, info is nice-to-have.",
      +            "enum": [
      +              "critical",
      +              "warning",
      +              "info"
      +            ],
      +            "type": "string"
      +          },
      +          "where": {
      +            "description": "Location of the issue (CSS selector, JSON-LD path, robots.txt line, or 'page-level').",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "severity",
      +          "category",
      +          "where",
      +          "message",
      +          "fix"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "sitemap_url": {
      +      "description": "Resolved sitemap URL (null when status != found).",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "status": {
      +      "description": "Outcome of the sitemap lookup.",
      +      "enum": [
      +        "found",
      +        "missing",
      +        "error"
      +      ],
      +      "type": "string"
      +    },
      +    "total_urls": {
      +      "description": "Total URLs declared across the sitemap (and indexed children).",
      +      "type": "number"
      +    },
      +    "urls_with_lastmod": {
      +      "description": "Count of URLs that carry a lastmod attribute.",
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "domain",
      +    "fetched_at",
      +    "status",
      +    "sitemap_url",
      +    "total_urls",
      +    "urls_with_lastmod",
      +    "findings"
      +  ],
      +  "type": "object"
      +}
  3. Changed2 schema fields changedv0.1.2
    • addedInput schema / properties / domain / description
      Added value: +"Hostname or origin to inspect. Examples: `example.com`, `https://example.com`. The tool tries `/sitemap.xml` then the sitemap URL declared in robots.txt; follows sitemap index files one level deep. Read-only HTTP GETs against the domain only."
    • addedInput schema / properties / max_urls_to_check / description
      Added value: +"Cap on how many URLs from the sitemap to sample for lastmod, image/video extension, and structural checks. Default 100. Increase up to 500 for large sites where you want a more representative sample; each extra URL is one HTTP HEAD."
  4. First observedv0.1.0

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, open-world, and non-destructive behavior, but the description adds substantive context beyond them: the N+1 HTTP GET pattern, HEAD sampling against up to max_urls_to_check URLs, one-level sitemap-index traversal, and that the logic is deterministic/rule-based with no LLM. It stops short of stating rate limits, timeout, or failure semantics for an unreachable sitemap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight blocks with zero filler: what it checks, how it behaves on the network, and when to use it. The routing information is front-loaded and no sentence is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the description covers behavior, request pattern, and usage routing adequately for a two-parameter read-only tool. The one real hole is the unresolved overlap with the sibling `audit_sitemap`, which an agent cannot resolve from this text.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters are fully documented in the schema, including examples for `domain` and the default/max semantics of `max_urls_to_check`. The description adds no parameter meaning beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (validate) and resource (XML sitemap) and enumerates exactly what is checked: presence, accessibility, URL count, lastmod freshness, sitemap-index handling, and image/video extensions. It distinguishes itself from check_robots, audit_page, and check_technical, but never addresses the near-identical sibling `audit_sitemap`, which is the one an agent is most likely to confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'When to use: site-wide indexing audits' plus a named companion tool (check_robots) and named alternatives for per-page checks (audit_page, check_technical). No exclusions are given relative to audit_sitemap, so the agent is left to guess between two sitemap tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.