Skip to main content
Glama

AI-SEO / AEO / GEO Audit

Check technical HEAD signals

check_technical
Read-onlyIdempotent

Audit a page's HEAD section for technical signals relevant to AI crawlers: HTTPS, canonical, OpenGraph, Twitter Card, hreflang, noindex, and title-vs-H1 hygiene.

Read-only. One HTTP GET, inspects HEAD only (body is not parsed).

Deterministic, rule-based; no LLM.

When to use: when you specifically need HEAD-tag audit findings. For the full page including schema and AI-Overview scoring, use audit_page. For canonical-only, use audit_canonical.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesPublic URL to audit. The tool fetches the URL once and inspects HEAD-section signals: HTTPS, canonical, OpenGraph, Twitter Card, hreflang, noindex, title length and overlap with H1. Body content is not parsed. Read-only HTTP GET.
respect_robotsNoIf true (default), respect robots.txt before fetching. Set false only for auditing your own site where you've intentionally blocked crawlers.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYes
httpsYes
noindexYes
og_tagsYes
findingsYes
hreflangYes
canonicalYes
twitter_cardYes
mixed_contentYes
noindex_headerYes
title_og_matchYes
meta_descriptionYes
response_headersYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed35 schema fields changed
    • addedOutput schema / properties / canonical / additionalProperties
      Added value: +false
    • removedOutput schema / properties / canonical / description
      Removed value: -"Canonical link href, if present."
    • addedOutput schema / properties / canonical / properties
      Added value: +{
      +  "cross_domain": {
      +    "type": "boolean"
      +  },
      +  "present": {
      +    "type": "boolean"
      +  },
      +  "self_referential": {
      +    "type": "boolean"
      +  },
      +  "value": {
      +    "type": [
      +      "null",
      +      "string"
      +    ]
      +  }
      +}
    • addedOutput schema / properties / canonical / required
      Added value: +[
      +  "present",
      +  "value",
      +  "self_referential",
      +  "cross_domain"
      +]
    • changedOutput schema / properties / canonical / type
      Previous value: -[
      -  "string",
      -  "null"
      -]New value: +"object"
    • removedOutput schema / properties / fetched_at
      Removed value: -{
      -  "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')."
    • removedOutput schema / properties / h1
      Removed value: -{
      -  "description": "First H1 text.",
      -  "type": [
      -    "string",
      -    "null"
      -  ]
      -}
    • addedOutput schema / properties / hreflang
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "count": {
      +      "type": "number"
      +    },
      +    "present": {
      +      "type": "boolean"
      +    },
      +    "x_default": {
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "present",
      +    "count",
      +    "x_default"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / properties / https / description
      Removed value: -"Whether the URL is served over HTTPS after redirects."
    • addedOutput schema / properties / meta_description
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "length": {
      +      "type": "number"
      +    },
      +    "present": {
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "present",
      +    "length"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / mixed_content
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "count": {
      +      "type": "number"
      +    },
      +    "samples": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "count",
      +    "samples"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / properties / noindex / description
      Removed value: -"Whether meta robots includes noindex."
    • addedOutput schema / properties / noindex_header
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / og_tags
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "description": {
      +      "type": "boolean"
      +    },
      +    "image": {
      +      "type": "boolean"
      +    },
      +    "title": {
      +      "type": "boolean"
      +    },
      +    "type": {
      +      "type": "boolean"
      +    },
      +    "url": {
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "title",
      +    "description",
      +    "image",
      +    "url",
      +    "type"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / properties / og_url
      Removed value: -{
      -  "description": "OpenGraph og:url, if present.",
      -  "type": [
      -    "string",
      -    "null"
      -  ]
      -}
    • addedOutput schema / properties / response_headers
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "cache_control": {
      +      "type": [
      +        "null",
      +        "string"
      +      ]
      +    },
      +    "content_security_policy": {
      +      "type": [
      +        "null",
      +        "string"
      +      ]
      +    },
      +    "hsts": {
      +      "type": [
      +        "null",
      +        "string"
      +      ]
      +    },
      +    "referrer_policy": {
      +      "type": [
      +        "null",
      +        "string"
      +      ]
      +    },
      +    "x_content_type_options": {
      +      "type": [
      +        "null",
      +        "string"
      +      ]
      +    }
      +  },
      +  "required": [
      +    "hsts",
      +    "x_content_type_options",
      +    "referrer_policy",
      +    "content_security_policy",
      +    "cache_control"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / properties / title
      Removed value: -{
      -  "description": "Page title text.",
      -  "type": [
      -    "string",
      -    "null"
      -  ]
      -}
    • addedOutput schema / properties / title_og_match
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / twitter_card
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "card_type": {
      +      "type": [
      +        "null",
      +        "string"
      +      ]
      +    },
      +    "present": {
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "present",
      +    "card_type"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "url",
      -  "fetched_at",
      -  "https",
      -  "canonical",
      -  "og_url",
      -  "noindex",
      -  "title",
      -  "h1",
      -  "findings"
      -]New value: +[
      +  "url",
      +  "https",
      +  "canonical",
      +  "noindex",
      +  "noindex_header",
      +  "og_tags",
      +  "twitter_card",
      +  "hreflang",
      +  "title_og_match",
      +  "meta_description",
      +  "response_headers",
      +  "mixed_content",
      +  "findings"
      +]
  2. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so safety is covered. The description adds real context beyond that: it performs exactly one HTTP GET, inspects HEAD only and does not parse the body, and is deterministic rule-based with no LLM involvement. It does not mention rate limits or timeouts, so it stops short of a 5.

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?

Front-loaded with what gets audited, followed by short scoping lines for behavior and routing. Every sentence carries distinct information; no filler.

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

Completeness5/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 explained. Behavior, scope, method, and sibling routing are all present; nothing an agent needs to call this correctly is missing.

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%, so both parameters (url, respect_robots) are already documented in the schema, including the robots.txt default semantics. The description adds no syntax or format detail beyond that, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific audit verb on a specific resource (a page's HEAD section) and enumerates the exact signals inspected: HTTPS, canonical, OpenGraph, Twitter Card, hreflang, noindex, title-vs-H1. This is clearly distinguishable from siblings like audit_page and audit_canonical.

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

Usage Guidelines5/5

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

Explicit when-to-use clause plus two named alternatives with their selecting conditions ('For the full page including schema and AI-Overview scoring, use `audit_page`. For canonical-only, use `audit_canonical`'). Routing is unambiguous.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources