SEO Audit Tool: On-Page Checker, Schema, Open Graph & llms.txt avatar

SEO Audit Tool: On-Page Checker, Schema, Open Graph & llms.txt

Pricing

from $6.00 / 1,000 page auditeds

Go to Apify Store
SEO Audit Tool: On-Page Checker, Schema, Open Graph & llms.txt

SEO Audit Tool: On-Page Checker, Schema, Open Graph & llms.txt

Crawl a website (or a list of URLs) and audit on-page SEO: titles, meta descriptions, headings, canonical, indexability, hreflang, JSON-LD schema, Open Graph, image alt text, links and word count, with a 0-100 score per page and a site report with robots.txt, sitemap and llms.txt checks.

Pricing

from $6.00 / 1,000 page auditeds

Rating

0.0

(0)

Developer

Julian Genuario

Julian Genuario

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Security

Limited permissions

Share

Audit the on-page SEO of a whole website (or a list of URLs) in one run. The Actor crawls the site like a search engine bot (respecting robots.txt, with a page cap you choose) and returns one row per page with the data and the issues an SEO specialist checks first, a 0-100 score per page, and a site report.

What does SEO Audit Tool do?

SEO Audit Tool crawls a website or a list of URLs and audits on-page SEO: title tags, meta descriptions, headings, canonical, indexability, hreflang, JSON-LD schema, Open Graph, image alt text, links and word count, with a 0-100 score per page and a site report with robots.txt, XML sitemap and llms.txt checks.

How to use SEO Audit Tool

  1. Click Try for free on this page (a free Apify account is enough to start).
  2. Fill in the input (see the examples below) or keep the prefilled example.
  3. Click Start and wait for the run to finish.
  4. Download the results from the Output tab as JSON, CSV, Excel or HTML, or read them with the Apify API.
  5. Optional: create a Schedule to run it daily or weekly, and connect a webhook or an integration (Make, Zapier, n8n, Slack).

What it checks

Per page

  • Title and meta description: text, length, too long / too short, duplicates across the site.
  • Headings: H1 text and count (missing / multiple), H2 count.
  • Indexability: HTTP status, meta robots and X-Robots-Tag (noindex / nofollow), canonical (self, other URL, missing, invalid), redirect chain.
  • International: html lang, hreflang alternates.
  • Structured data: JSON-LD and microdata types (Organization, Product, Article, FAQPage...), JSON-LD blocks that do not parse.
  • Social previews: Open Graph (title, description, image, type, URL) and Twitter card.
  • Images: total, missing alt, empty alt.
  • Links: internal, external, nofollow; mixed content on HTTPS pages.
  • Content and speed: word count (thin content), HTML size, server response time, mobile viewport.

Per site (record REPORT in the key-value store)

  • robots.txt found or not, sitemaps (from robots.txt or /sitemap.xml) and their size.
  • llms.txt and llms-full.txt (the new standard that tells AI assistants what your site is about): found, size, title, summary, sections and links.
  • Average score, indexable / noindex pages, broken pages (4xx / 5xx), issues ranked by number of pages, worst pages, schema types used, URLs disallowed by robots.txt, and where the crawl stopped.

Input

FieldWhat it does
Websites or URLsStart URLs. Also from a dataset or a CSV / Google Sheets link.
ModeCrawl the website (follows internal links and sitemap URLs) or Only the URLs in the list.
Max pages per siteDefault 30, up to 5,000.
Max link depth0 = only the start URLs.
Also use the sitemapSeed the crawl with sitemap URLs.
Only URLs containing / Skip URLs containingText or /regex/ filters, e.g. only /blog/.
Requests in parallel per site, Sites in parallel, DelaySpeed vs. politeness.

Example input

{
"startUrls": ["https://www.example.com"],
"mode": "crawl",
"maxPagesPerSite": 200,
"excludeUrlPatterns": ["/tag/", "?page="]
}

Output (one row per page)

{
"site": "https://crawlee.dev",
"url": "https://crawlee.dev/js/docs/quick-start",
"statusCode": 200,
"status": "ok",
"score": 97,
"title": "Quick Start | Crawlee for JavaScript",
"titleLength": 36,
"metaDescription": "...",
"metaDescriptionLength": 41,
"h1": ["Quick Start"],
"h1Count": 1,
"canonical": "https://crawlee.dev/js/docs/quick-start",
"canonicalStatus": "self",
"indexable": true,
"lang": "en",
"hreflang": [],
"openGraph": { "title": "Quick Start", "image": "https://crawlee.dev/img/crawlee-javascript-og.webp" },
"schemaTypes": ["BreadcrumbList"],
"imagesMissingAlt": 0,
"internalLinks": 58,
"wordCount": 912,
"responseTimeMs": 140,
"issues": [{ "code": "meta-description-too-short", "severity": "notice", "message": "Meta description shorter than 50 characters" }]
}

Pages that answer 4xx / 5xx, time out or redirect to another site are listed with status: "error" and are not charged.

Scoring

Every page starts at 100 and loses points per issue (e.g. missing title -15, missing meta description -8, missing H1 -8, not HTTPS -10, missing viewport -5, images without alt -5, thin content -5, duplicate title -5, long title -3). The issue list with severity (error / warning / notice) is in each row, so you can filter and fix in order.

Pricing

Pay per event:

  • USD 6 per 1,000 pages audited (USD 0.006 per page).
  • USD 0.05 per site report (one per website with at least one audited page).

Broken or unreachable pages and URLs blocked by robots.txt are free. The run respects your max charge per run and stops crawling before going over it.

Good behaviour

  • robots.txt is always respected (every redirect hop is checked too), including Crawl-delay; nofollow pages are audited but their links are not followed.
  • Identifiable user-agent SeoAuditBot, at most 2 requests in parallel per site with a delay between requests, retries with back-off on 429 / 5xx.
  • Plain HTTP and an HTML parser, no browser: JavaScript-only sites (that render all content in the browser) show little content; server-rendered and static sites are fully covered.

Why use SEO Audit Tool

  • Page rows + a site report in one run: every page with its issues and a 0-100 score, plus a REPORT with robots.txt, sitemaps, broken pages, duplicates and the worst pages to fix first.
  • Checks the new AI-era files: llms.txt and llms-full.txt are parsed (title, summary, sections, links), next to JSON-LD schema and Open Graph previews.
  • Duplicates across the site: duplicate titles and meta descriptions are flagged on every page that shares them.
  • Fair pricing: broken, blocked and off-site pages are free, and the crawl stops before your max charge per run.
  • Polite crawler: robots.txt and Crawl-delay are respected on every request and redirect hop, so you can audit client and competitor sites safely.

Cost examples

Prices at the current pay-per-event rates (see Pricing). You can set a maximum charge per run in the run options.

JobApproximate cost
1 site, 30 pages (default)about $0.23
1 site, 500 pagesabout $3.05
20 client sites, 100 pages each, monthlyabout $13.00

Use it from your code, an integration or an AI agent

Python (pip install apify-client):

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("latamdatatools/seo-onpage-audit").call(run_input={
"startUrls": [
"https://crawlee.dev"
],
"maxPagesPerSite": 10
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript / Node.js (npm install apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('latamdatatools/seo-onpage-audit').call({
"startUrls": [
"https://crawlee.dev"
],
"maxPagesPerSite": 10
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

No code:

  • Schedules: run it daily or weekly from Apify Console (Schedules), with the same input saved as a Task.
  • Integrations: send results to Google Sheets, Slack, email, Make, Zapier, n8n or Airbyte from the Integrations tab, or call your own webhook when a run finishes.
  • AI agents: add it as a tool in Claude, Cursor, VS Code and other MCP clients through the Apify MCP server (https://mcp.apify.com), so the agent can run SEO Audit Tool and read the results.

FAQ

Can I audit only some sections? Yes: use Only URLs containing (for example /blog/) or switch the mode to Only the URLs in the list and paste the URLs.

Do you have a Core Web Vitals checker too? Yes: Bulk PageSpeed Insights Checker runs Lighthouse and CrUX for a list of URLs.

Does it check Core Web Vitals? No. Use a PageSpeed Insights Actor for lab and field performance.

Why did the crawl stop? See crawlStoppedAt in the report: page cap, depth or max charge per run.

Questions or a check you miss? Open an issue in the Issues tab.