SEO Page Audit — tags, headings, structured data and links avatar

SEO Page Audit — tags, headings, structured data and links

Pricing

from $3.20 / 1,000 page auditeds

Go to Apify Store
SEO Page Audit — tags, headings, structured data and links

SEO Page Audit — tags, headings, structured data and links

Audit page URLs for SEO: titles, descriptions, canonical and robots directives, hreflang, headings, Open Graph/Twitter tags, JSON-LD and microdata, image alt text, links, word count, viewport, language, mixed content, status and redirects. Return findings with severity.

Pricing

from $3.20 / 1,000 page auditeds

Rating

0.0

(0)

Developer

Logan Parker

Logan Parker

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Give it page URLs; it returns an on-page SEO audit of each: title and meta description (presence and length), canonical, robots meta and X-Robots-Tag, hreflang, heading outline, Open Graph and Twitter card tags, JSON-LD and microdata items with required-property checks for common schema.org types, images missing alt text, internal and external link counts, word count, viewport and language, mixed content, status and redirects — as findings with severity.

Development validation produced actual successful public-input records using the production Dockerfile and SDK entrypoint on GitHub-hosted Linux. The smoke input, all three tasks and every defined benchmark passed their exact expectations. The independent review completed on 2026-10-19; its findings are tracked in the committed fix report. Platform costs, settlement, publication and daily tests remain unverified.

Call it from an agent

Through Apify's MCP server (https://mcp.apify.com) use call-actor:

{
"actor": "hermeskd/seo-page-audit",
"input": {
"urls": [
"https://docs.apify.com/platform/actors/publishing/monetize"
]
},
"callOptions": {
"maxTotalChargeUsd": 0.05,
"timeout": 600
},
"waitSecs": 30
}

Then call get-dataset-items with the returned defaultDatasetId. Dedicated tool URL: https://mcp.apify.com?tools=hermeskd/seo-page-audit

Input

FieldTypeMeaning
urlsarrayPublic HTTP(S) URLs to process; errors are uncharged.
renderstringauto renders sparse HTML; never audits static HTML; always audits the rendered DOM.

Output

FieldMeaning
urlInput URL.
finalUrlURL after redirects.
okTrue for a readable audit, including pages with SEO findings.
statusFinal HTTP status.
findingsActionable observations; length checks are editorial heuristics.
summaryFinding counts by severity.
metaTitle, description, canonical, robots, language, viewport, hreflang and social metadata.
headingsDocument heading outline.
structuredDataTypes and profile validation only; unknown types valid=null; no contact values returned.
linksHTTP(S) link counts.
wordCountWords in visible static/rendered text, excluding scripts and styles.
imagesMissingAltImages without an alt attribute; decorative empty alt is accepted.
errorFailure, always uncharged.

Actual production-container record from 2026-10-18T20:25:04.510238+00:00 (code f063187693578dd7551fa2bec552281e2f0f3e33, smoke input, SDK local storage). The saved record is unchanged; local event logs do not prove Apify settlement.

{
"url": "https://docs.apify.com/platform/actors/publishing/monetize",
"finalUrl": "https://docs.apify.com/actors/publishing/monetize",
"ok": true,
"status": 200,
"findings": [
{
"id": "twitter_missing",
"severity": "notice",
"message": "Recommended Twitter card metadata is absent.",
"evidence": "twitter:title"
},
{
"id": "twitter_missing",
"severity": "notice",
"message": "Recommended Twitter card metadata is absent.",
"evidence": "twitter:description"
},
{
"id": "redirected",
"severity": "notice",
"message": "The requested URL redirects.",
"evidence": [
"https://docs.apify.com/actors/publishing/monetize"
]
}
],
"summary": {
"errors": 0,
"warnings": 0,
"notices": 3
},
"meta": {
"title": "Monetize Actors | Platform | Apify Documentation",
"description": "Monetize your Actors on Apify Store and earn regular passive income.",
"canonical": "https://docs.apify.com/actors/publishing/monetize",
"robots": [],
"xRobotsTag": null,
"lang": "en",
"viewport": "width=device-width, initial-scale=1.0",
"hreflang": [
{
"lang": "en",
"url": "https://docs.apify.com/actors/publishing/monetize"
},
{
"lang": "x-default",
"url": "https://docs.apify.com/actors/publishing/monetize"
}
],
"openGraph": {
"og:url": "https://docs.apify.com/actors/publishing/monetize",
"og:locale": "en",
"og:title": "Monetize Actors | Platform | Apify Documentation",
"og:description": "Monetize your Actors on Apify Store and earn regular passive income.",
"og:image": "https://apify.com/og-image/docs-article?title=Monetize+Actors"
},
"twitter": {
"twitter:card": "summary_large_image",
"twitter:image": "https://apify.com/og-image/docs-article?title=Monetize+Actors"
}
},
"headings": [
{
"level": 1,
"text": "Monetize Actors"
},
{
"level": 2,
"text": "Pricing models"
},
{
"level": 2,
"text": "Fees and costs"
},
{
"level": 3,
"text": "Platform usage"
},
{
"level": 3,
"text": "Testing costs"
},
{
"level": 3,
"text": "Apify's commission"
},
{
"level": 2,
"text": "Make your Actor eligible for agentic payments"
},
{
"level": 2,
"text": "Handle free users"
},
{
"level": 2,
"text": "Actor analytics"
},
{
"level": 2,
"text": "Promote your Actor"
}
],
"structuredData": [],
"links": {
"internal": 78,
"external": 23,
"nofollow": 0
},
"wordCount": 918,
"imagesMissingAlt": 0
}

Events and prices

EventTitleCharged whenFREE / BRONZESILVERGOLD / PLATINUM / DIAMOND
page-auditedPage auditedOne successfully fetched and audited HTML page.$0.004$0.0036$0.0032

Platform usage is not passed through. Apify's automatic actor-start event remains $0.00005 per started GB (one GB or less counts once). The synthetic dataset-item event is absent. Charge limits stop further paying work; unprocessed inputs receive uncharged errors. Completed readable pending events are settled on abort.

Worked cost example: ten successful primary events cost $0.04 at list, plus actor start. Failures are not included in that count.

Limits and run time

1–100 URLs; 10 MiB per HTML response. auto renders HTML with fewer than 200 static words, never parses static HTML only, always audits the rendered DOM. Actual HTML is requested; Markdown and files are rejected, uncharged. Title length 30–60 and description length 50–160 are editorial heuristics, not ranking guarantees. Structured-data profiles cover Article, NewsArticle, BlogPosting, Organization, BreadcrumbList and ListItem. Article/Organization currently have no required properties. Unknown types have valid=null; no complete schema.org or rich-result eligibility claim. Up to 1,000 structured nodes and depth 50.

Default run timeout is 600 seconds. Typical cold platform time, costs and the smallest passing memory have not been measured for this new implementation. Memory probes are evidence to collect later; configured memories are specification defaults, not measured claims.

Errors

CodeMeaning
download_failedThe request or connection failed within its bounded deadline.
http_errorThe source answered an unsuccessful HTTP status.
unsupported_content_typeAn HTML audit/crawl received a non-HTML representation.
too_largeA documented response, expansion or traversal cap was exceeded.
robots_disallowedrobots.txt forbids fetching the URL; no request was made to it.
blocked_hostThe host is on the deny-list or resolves to a private or local address; no request was made.
login_requiredThe page is a sign-in wall; no authentication is attempted.
timeoutThe input did not finish within the run's time budget.
internal_errorUnexpected failure; the message carries the error class.
charge_limit_reachedThe run reached its maximum total charge; this input was not processed.
invalid_inputThe run input passed the input schema but cannot be used; the message names the field.

No failure record is charged. A run fails only when all input outcomes are Actor-side failures; caller errors and a mixture of caller/Actor failures do not fail the run.

Sources and terms

Only process content you have the right to process. URL fetches obey HermesBot robots-group selection, the shared deny-list, public-address checks on connections and redirects, honest identity, deadlines and rate limits. No caller credentials, cookies, CAPTCHA solving, residential proxies or evasion. Public caller-named HTML is parsed directly or after guarded Chromium rendering. Structured-data required-property checks cover the documented Article, Organization and Breadcrumb profiles; unsupported types remain unassessed. No contact values from structured data are returned. The committed enumeration records the Google Search guidance used for those profiles.

Not affiliated

This Actor is not affiliated with Google, Apify, IANA, Verisign or other named protocol/source providers. Third-party names describe compatibility and source material.

website-screenshot, lighthouse-audit, seo-page-audit, domain-availability, dns-and-email-auth, broken-links and sitemap-urls.

Changelog

2026-10-17 (historical): initial implementation and fixture contracts; packaging and public production validation were incomplete on that date.

2026-10-18: all six production images, public smoke inputs, three tasks per Actor and defined benchmarks passed on GitHub-hosted Linux; exact code, records and image provenance are retained with the examples. These local SDK runs do not prove platform costs, settlement, publication, minimum memory, daily tests or payouts.

2026-10-19: independent-review repairs cover DNS privacy, malformed publisher URLs, empty sitemap failures, responsive assets and schema prefill, as applicable to this Actor. See the committed unit 4 fix report for measured verification and remaining platform NO-COVERAGE.