On-Page SEO & Metadata Audit (Bulk URLs) avatar

On-Page SEO & Metadata Audit (Bulk URLs)

Pricing

from $5.00 / 1,000 url auditeds

Go to Apify Store
On-Page SEO & Metadata Audit (Bulk URLs)

On-Page SEO & Metadata Audit (Bulk URLs)

Audit titles, meta descriptions, Open Graph, Twitter cards, canonical, hreflang, robots and JSON-LD on up to 5,000 URLs you list. Get a score and a plain fix list per page. Only your listed URLs are fetched; failed pages are free. $0.005 per URL audited.

Pricing

from $5.00 / 1,000 url auditeds

Rating

0.0

(0)

Developer

Plainwren Studio

Plainwren Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

38 minutes ago

Last modified

Security

Limited permissions

Share

What is On-Page SEO & Metadata Audit?

On-Page SEO & Metadata Audit checks the SEO and social metadata on URLs you list and returns a score plus a plain fix list for each page. It is for your own or authorised sites.

It fetches only the URLs you give it. It does not crawl, follow links or read sitemaps. It obeys robots.txt, never logs in, never sends cookies, and never gets past captchas or bot checks. A page that refuses access comes back as a failed row, and failed rows are free.

Try it: leave the URL list empty and click Start for a free demo on a built-in sample page.

Bot info (user agent and behaviour): tools.plainwrenstudio.com/bots/seo-audit/. Support: support@plainwrenstudio.com.

What it checks, per listed URL

  • Title: present, single, length in characters (default 30–60, editable).
  • Meta description: present, single, length (default 70–160, editable).
  • Headings: h1 text and count, h1–h3 counts, skipped levels.
  • Canonical: from <link rel=canonical> and the Link header (self, other, missing, multiple, cross-domain or invalid; relative URLs resolved, including <base href>).
  • Robots: meta robots / googlebot, the X-Robots-Tag header, and indexable from both.
  • hreflang: valid codes, self link, no duplicates; return links checked between the URLs you listed (partner pages you did not list are reported, never fetched).
  • Social: Open Graph (title, description, image, url, type, site_name) and Twitter card. og:image is checked with one HEAD (cached, same rate limit and robots rules).
  • JSON-LD: each block is valid JSON, its @type, and missing recommended properties for Article, Product, Organization, LocalBusiness, BreadcrumbList, FAQPage and WebSite (@graph and arrays handled).
  • Images: <img> without an alt attribute (alt="" counts as fine).
  • Basics: html lang, viewport, declared charset, and a word count (a number only).
  • A plain fix list (issues: code, severity, message, fix) and a score: 100, minus 10 per error, minus 3 per warning, floor 0.

Who is it for?

  • 🧑‍💻 SEO and marketing teams auditing their own site's titles, meta tags and structured data in bulk.
  • 🔗 Agencies and freelancers who need a CSV or HTML report for clients.
  • 🤖 Developers and agents calling it through the Apify API, integrations or MCP.

How to run an audit

  1. Open the Input tab.
  2. Add the pages under URLs (one per line), or leave empty for the free demo.
  3. Optional: turn check groups on or off, change title / description length ranges, or adjust the polite rate.
  4. Click Start.
  5. Read the dataset rows, or download REPORT.csv / REPORT.html from the key-value store.

Input example

{
"urls": [
"https://tools.plainwrenstudio.com/",
"https://tools.plainwrenstudio.com/bots/",
"https://tools.plainwrenstudio.com/json-formatter/"
],
"checks": {
"title": true,
"meta": true,
"headings": true,
"canonical": true,
"robots": true,
"hreflang": true,
"social": true,
"jsonLd": true,
"images": true,
"basics": true
},
"titleLength": { "min": 30, "max": 60 },
"descriptionLength": { "min": 70, "max": 160 },
"checkOgImage": true,
"requestsPerSecond": 1,
"maxConcurrency": 4,
"timeoutSecs": 20
}
FieldTypeWhat it does
urlsarray of stringsPages to audit, max 5,000 per run. Only these exact URLs are fetched. A URL without a scheme gets https://. Leave empty for the free demo.
checksobjectTurn check groups on or off (all on by default).
titleLengthobjectWarn when the title is outside min/max characters (default 30–60).
descriptionLengthobjectWarn when the meta description is outside min/max (default 70–160).
checkOgImageboolean (default true)One HEAD per distinct og:image URL.
requestsPerSecondnumber (default 1, 0.2–4)Max request rate per host; one request at a time per host.
maxConcurrencyinteger (default 4, 1–10)How many different hosts at once.
timeoutSecsinteger (default 20, 5–60)Per-request timeout. Timeouts are free.

Output

  • Dataset: one row per URL (same fields every time). Rows arrive in completion order; index is the position in your input.
  • Key-value store:
    • SUMMARY: URLs audited, average score, failures by code, top issues with page counts, hreflang return-link totals.
    • HREFLANG: return-link results for each page.
    • REPORT.csv: UTF-8 with a BOM; formula-looking cells are neutralised.
    • REPORT.html: static, escaped, no scripts, with a strict CSP.
    • OUTPUT: run counts.
  • Failure codes (never charged): BAD_URL, GUARD_BLOCKED, DNS_FAILED, ROBOTS_BLOCKED, AUTH_REQUIRED, BOT_CHALLENGE, RATE_LIMITED, HTTP_ERROR, NOT_HTML, TOO_MANY_REDIRECTS, TIMEOUT, FETCH_FAILED, DUPLICATE, PARSE_FAILED.
  • Note: HREFLANG_NO_RETURN needs every listed page, so it is reported in HREFLANG, SUMMARY and the reports at the end of the run, not in each row's issues.

How much does it cost?

Pay-per-event pricing:

  • $0.005 per URL audited (url-audited): $5.00 per 1,000 successfully audited HTML pages.
  • Failed URLs are free (robots-blocked, login/challenge, rate-limited, guard-blocked, non-HTML, duplicates, timeouts, and the demo run).
  • The run stops cleanly before it would go over your maximum charge.

Apify's free plan includes monthly platform credit you can use to try it.

How polite it is

  • One request at a time per host; default 1 request per second (0.2–4).
  • Up to 4 hosts at once by default (max 10).
  • robots.txt read once per host and obeyed. Crawl-delay honoured up to 10 s.
  • On 429/503: waits Retry-After (max 60 s, 2 retries), then RATE_LIMITED (free).
  • Private, internal and reserved addresses are refused on the first request, on every redirect hop, and again at DNS lookup. Max 5 redirect hops.
  • Honest User-Agent: PlainwrenSEOAudit/1.0 (+https://tools.plainwrenstudio.com/bots/seo-audit/).
  • Plain HTTP only: no JavaScript, no browser.

Limits

  • Up to 5,000 URLs per run; extras are skipped, reported and not charged.
  • No login, cookies, auth headers or proxies. Pages behind a login or bot check fail as free rows.
  • It does not execute JavaScript, so client-rendered-only pages may look empty of tags.
  • It returns SEO and metadata fields only: no body text, emails or phone numbers.

FAQ

Does it crawl my site?

No. Only the URLs you list are fetched (plus robots.txt per host, and an optional HEAD for each distinct og:image).

Am I charged for pages that fail?

No. Failures are free, including the demo run.

Can I use it from Make, Zapier, n8n or an AI agent?

Yes, through Apify's integrations, API and MCP.

Something looks wrong. What should I do?

Open an issue on the Actor's Issues tab (remove anything private) or email support@plainwrenstudio.com.