Skip to main content
Glama

SEO audit of a website

seo_audit_website
Read-only

Crawl a site and audit each page for on-page SEO issues like missing titles, meta descriptions, H1s, canonicals, alt text, and thin content; get per-page issues and a 0–100 score.

Instructions

Crawl a site from one or more start pages (same host only) and audit every page for on-page SEO problems: missing or overlong titles and meta descriptions, H1s, canonicals, noindex, image alt text, thin content, Open Graph, JSON-LD and slow responses. Returns one record per page with a list of issues and a 0-100 score. Use it to find what to fix on a site; use extract_website_metadata instead when you only need the tags of known URLs. Cost, charged to your own Apify account: $0.003 per page audited; $0.00005 per Actor start (per GB of memory, once per run). Each call is capped at maxCostUsd (default $0.25). Defaults applied by this server when omitted: maxPagesPerSite=10. Runs Apify Actor fecklesspleb/website-seo-audit (https://apify.com/fecklesspleb/website-seo-audit).

Input Schema

NameRequiredDescriptionDefault
startUrlsYesWebsites to audit. Start page of each site, usually the home page, e.g. ["https://books.toscrape.com/"]. Plain URL strings or {"url": "..."} objects; a URL without http(s):// gets https:// added. Only links on the same host are crawled (www. and the bare domain count as one host) and robots.txt is obeyed. Default ["https://www.python.org/"] is a sample run: at most 2 pages, stops after 15 s.
maxCostUsdNoMost this call may charge your Apify account, in US dollars. Default 0.25, maximum 5. Passed to Apify as maxTotalChargeUsd, the most Apify will charge for this run.
maxResultsNoMax pages in dataset. Maximum rows saved to the dataset in the whole run, across all sites. Default 0 = no cap. Free rows (pages that returned HTTP 400+ or no response) also count. The crawl stops when the cap is reached. Each charged row costs $0.003.
includeJsonLdNoInclude JSON-LD data. If true, each row gets jsonLd: the parsed JSON-LD blocks, with email, telephone, author, creator, contributor, editor and reviewedBy keys removed. Default false. jsonLdTypes (schema.org types found) and jsonLdErrors (blocks that failed to parse) are always included.
excludePatternsNoExclude URL patterns. Regular expressions for links not to crawl, matched case-insensitively anywhere in the full URL, e.g. ["/tag/", "\\?page="]. They apply to links found on pages; the start URL is always audited. Default: none.
maxPagesPerSiteNoMax pages per site. Maximum pages audited per start URL, 1 to 10,000. Default 10. Pages that fail (HTTP 400+ or no response) count; pages blocked by robots.txt, non-HTML files and redirects to another host do not. Example: 200 for a full audit of a small site.
onlyPagesWithIssuesNoOnly pages with issues. If true, pages with no issues are not saved and not charged; only pages with at least one issue are output. Default false: every audited page is output.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations, the description discloses the full cost model ($0.003 per page, per-run Actor start fee), the maxCostUsd cap (default $0.25) and the server-side default maxPagesPerSite=10, plus the fact that only same-host links are crawled. It also states the return shape (one record per page with issues and a 0-100 score), so an agent knows what it will get back and what it will spend.

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

Conciseness4/5

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

The description is dense, but it is front-loaded with purpose and the alternative before moving to cost and defaults; almost every clause carries information. It is a single long block, however, and the Actor identifier/URL at the end is provenance rather than something an agent uses to invoke the tool.

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?

For a seven-parameter, pay-per-page crawl tool with no output schema, the description covers the crawl scope, defaults, cost ceiling, result granularity, and the sibling alternative. Nothing an agent needs in order to call it correctly, or to predict the bill, is missing.

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

Parameters4/5

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

Schema description coverage is already 100%, so the baseline is 3; the description still adds cost meaning to parameters that the schema leaves abstract, tying each charged row to $0.003 and noting which failures still count as pages. The remaining cost and pagination semantics are largely delegated to the schema, so it does not fully earn a 5.

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?

The description names a specific verb and resource ('Crawl a site ... and audit every page') and enumerates exactly what is checked (titles, meta descriptions, H1s, canonicals, noindex, alt text, JSON-LD, response time). It also explicitly distinguishes itself from the sibling extract_website_metadata, so an agent can choose without opening either schema.

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?

It gives an explicit when-to-use rule ('use it to find what to fix on a site') paired with the alternative and its selection condition ('use extract_website_metadata instead when you only need the tags of known URLs'). The same-host restriction and robots.txt obedience are also stated up front.

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