Ultimate SEO Audit & Website Analyzer avatar

Ultimate SEO Audit & Website Analyzer

Pricing

from $10.00 / 1,000 page auditeds

Go to Apify Store
Ultimate SEO Audit & Website Analyzer

Ultimate SEO Audit & Website Analyzer

Renders every page in Chromium and audits meta tags, headings, content, technical SEO, structured data, lab performance, links, images, accessibility (axe-core), mobile, hreflang and AI-search visibility. Traceable scores, site action plan, run-to-run history, HTML/PDF/CSV reports.

Pricing

from $10.00 / 1,000 page auditeds

Rating

0.0

(0)

Developer

Badr Bouargan

Badr Bouargan

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Features

Limited permissions

Share

Ultimate SEO Audit: visual report of a real run, key figures and charts

Audit one website or compare several. Every page is rendered in a real Chromium browser, checked by twelve modules, scored with traceable points, and summarised in an action plan, an interactive HTML report, a PDF, a CSV of issues and a run-to-run history.

What you get per run

OutputWhereWhat it contains
Page recordsDataset (recordType: "page")Score, band, 9 category scores, every lost point, issues with explanation + fix + example, and the raw data of each module
Site summariesDataset (recordType: "site-summary")Site score, action plan, top issues, duplicates, broken links/images, non-indexable pages, coverage, robots/sitemaps, AI-bot permissions, history diff
REPORTKey-value store, text/htmlSelf-contained interactive report: overview with gauges, action plan, page explorer (search, filter, sort, pagination, page detail), issues, broken links, image gallery, schema inspector, accessibility, performance, crawl & AI, multi-site comparison, history, JSON/CSV export. While the crawl runs it shows live progress (pages processed / total, refreshed at most once a minute); an Errors & warnings panel groups pages and inputs that were not audited by code; a Data quality & coverage panel shows audited / failed / skipped pages and how many pages each check category could score
REPORT_PDFKey-value store, application/pdfPrintable summary per site
ISSUESKey-value store, text/csvOne row per issue per page (and site-wide issues) with recommendation
RUN_SUMMARYKey-value store, application/jsonTotals, per-site comparison, timing, outputs
FAILED_INPUTSKey-value store, application/jsonInvalid inputs, robots-blocked start URLs, failed and turned-away pages (none of them charged)

What is checked

  • Meta: title and description length in characters and estimated pixels (Arial metrics), duplicates across the site, several titles/descriptions, charset, lang, Open Graph, Twitter card (with Open Graph fallback), head elements that ended up in <body>.
  • Headings: outline, missing/empty/multiple H1, skipped levels, H1 vs title overlap.
  • Content: words (Unicode aware, CJK per character), paragraphs, sentences, average sentence length, reading ease for EN/DE/FR/ES/IT/NL/PT, top keywords and phrases, keyword stuffing, placeholder text, exact duplicates (SHA-1) and near duplicates (SimHash of distinct 5-word shingles).
  • Technical: status, HTTPS, TLS certificate, http->https redirect, redirect chains and loops, robots.txt (RFC 9309), sitemaps (index, gzip, text), indexability (meta robots, googlebot, X-Robots-Tag), canonical (HTML + Link header, multiple, relative, outside head, target broken/redirecting/noindex, chains), soft 404 (error wording, or same content as a random missing URL), JavaScript dependence (server HTML vs rendered DOM), mixed content, compression, URL length, pagination targets, orphan pages (sitemap vs links, only when the crawl covered the whole site).
  • International: hreflang from the HTML, the HTTP Link header and the XML sitemap; invalid codes (validated with the runtime's Unicode data, e.g. en-UK -> en-GB), relative URLs, missing self-reference, conflicts between sources, x-default, broken targets, missing return links.
  • Structured data: JSON-LD (including @graph), microdata and RDFa; parse errors; required properties for Product, Breadcrumb, Event, Recipe, Job posting, Video, Local business, Software app, FAQ, Q&A, Review, Course, Dataset.
  • Performance (lab): LCP, CLS, TBT, FCP, TTFB, DOMContentLoaded, load, transfer weight and requests by type.
  • Links: internal/external, nofollow, empty anchors, too many links, insecure internal links, and every unique link checked once per run (HEAD, then GET when HEAD fails), redirects.
  • Images: alt coverage, decorative images, broken images, real weight (browser network data, else Content-Length, else a bounded download), format, dimensions attributes, images much larger than displayed.
  • Accessibility: axe-core 4.11 with WCAG 2.0/2.1/2.2 A and AA rules plus best practices; "needs review" items listed separately.
  • Mobile: viewport, zoom blocking, horizontal overflow, tap targets (WCAG 2.5.8 size + spacing test) and small text, measured at a 375 px viewport.
  • AI search visibility: robots.txt permissions for search bots (OAI-SearchBot, Claude-SearchBot, PerplexityBot...), training bots (GPTBot, ClaudeBot, CCBot, meta-externalagent...), control tokens (Google-Extended, Applebot-Extended) and user-triggered fetchers, per start URL and as a share of the audited URLs; /llms.txt presence (informational).

Honest limits

  • Lab, not field data. Performance comes from one unthrottled desktop load in headless Chromium close to the crawler. Real-user Core Web Vitals (CrUX) can be very different, especially on phones. The Core Web Vitals thresholds are used only as guidance.
  • Accessibility: automated rules catch only part of the problems. Results are never a conformance claim.
  • robots.txt permission is not access. A bot allowed by robots.txt can still be blocked by a firewall or CDN, and user-triggered fetchers may not read robots.txt.
  • Rich results: having the required properties does not guarantee that a search engine shows a rich result.
  • Pixel widths of titles/descriptions are estimates.
  • Broken vs unverified: hosts that refuse automated checks (401/403/429/999, timeouts) are reported as "unverified", never as broken.
  • Turned away: bot challenges, CAPTCHAs, login walls and 401/403/429 answers are reported as "turned away". They are never bypassed, never scored and never charged.
  • Orphan pages are only reported when the crawl reached every page (no page/depth limit hit, not start-URLs-only, not seeded from the sitemap). Otherwise the report says why the check was not possible.
  • Mobile checks re-lay out the page at 375 px without touch emulation.

Scores (formulas)

  • Every issue type has a severity and points (critical 30, high 15, medium 8, low 3, info 0; a few documented exceptions such as accessibility impacts 15/8/4/1, best-practice-only axe rules count half).
  • Category score (per page) = max(0, 100 - sum of the points of the issues in that category). Categories: technical, on-page, content, performance, accessibility, internal linking & links, images, mobile, schema.
  • A category that was not measured (module off, metric unavailable, page without images, axe error) is left out, never counted as 0.
  • Page score = rounded mean of the scored categories except links (links mostly reflect other websites). Pages that are not indexable (4xx/5xx, noindex) are capped at 39.
  • Bands: good 80+, needs improvement 60-79, poor 40-59, critical below 40.
  • Site category score = mean of the page category scores minus the points of site-wide issues in that category (floor 0). Site score = mean of the site category scores except links.
  • Every deduction is stored in deductions (page) and siteDeductions (site) with the issue id, rule and points.
  • Priority in the action plan: critical severity -> critical; high -> high; medium -> medium (long-term when the fix effort is high); low -> long-term.

Input

FieldDefaultNotes
startUrlsdemo: books.toscrape.comOne report per website; several websites are compared
crawlPagestrueOff = audit only the start URLs
maxPages5Per website; this is what you pay for
maxDepth5Clicks from a start URL
seedFromSitemapfalseQueue sitemap URLs too
includeSubdomainsfalse
includeUrlPatterns / excludeUrlPatterns[]Glob (/blog/**, **?sort=*) or /regex/
respectRobotsTxttrueCrawl-delay honoured (max 10 s)
maxConcurrency3Pages rendered in parallel
pageTimeoutSecs45
checkExternalLinkstrue
maxLinkChecksPerSite1000Unique URLs checked per website (0 = none)
maxImagesPerPage100
soft404ProbetrueOne request to a random missing URL per website
auditMeta ... auditAiVisibilitytrue12 module switches
generateHtmlReport, generatePdfReporttrue
pageScreenshotstrueSmall above-the-fold JPEG per audited page (desktop, plus phone when the mobile check runs) taken from the render the audit already does; stored as SHOT-... records in the key-value store, shown in the page explorer and page detail (max 3 per page). Not charged.
useHistory, historyStoreNametrue, seo-audit-historyNamed key-value store with the last 10 runs per website

Empty input runs a quick 5-page demo audit. Invalid values fall back to defaults and are listed in FAILED_INPUTS.

Examples

{ "startUrls": [{ "url": "https://www.example.com/" }], "maxPages": 50 }
{ "startUrls": [{ "url": "https://shop-a.example/" }, { "url": "https://shop-b.example/" }], "maxPages": 20, "excludeUrlPatterns": ["/cart/**", "**?sort=*"] }

Ready-made inputs are in tasks/ (quick audit, full site, technical, Core Web Vitals lab, accessibility, AI search visibility, multi-site comparison, deep audit).

History & regressions

With useHistory on, each run stores a compact snapshot per website (score, category scores, page scores, issue keys) in the named store. The next run reports the score change, new issues, fixed issues (only for pages audited in both runs), regressed and improved pages (5+ points), and flags a regression. Schedule the Actor to monitor a site.

Pricing

Pay per event: page-audited = one rendered and analysed page with a 2xx/3xx answer. Not charged: robots-blocked, excluded, duplicate, file, failed, error (4xx/5xx) and turned-away URLs, site summaries and reports. Plus a tiny $0.00005 start fee per run (one event per GB of memory). Price per 1,000 audited pages by Apify plan: Free $20 ($0.02 per page), Starter $16, Scale $13, Business and above $10 ($0.01 per page). Free-plan examples: 20 pages = $0.40, 100 pages = $2, 500 pages = $10. Apify platform usage (compute) is included in this price. A run stops cleanly when the maximum cost per run is reached; pages after the limit are neither audited nor charged.

FAQ

Why does my score differ from PageSpeed Insights? PSI uses throttled mobile lab runs and real-user data; this Actor measures one unthrottled desktop load. Use the values to compare pages and runs, not as field data.

Why is a link "unverified"? The target refused automated requests (for example 403 or 429). It may work fine in a browser.

Does it log in or solve CAPTCHAs? No. Those pages are reported as turned away.

Why are some categories "n/a"? They were not measured (module switched off, no images on the page, metric unavailable). They do not lower the score.

How much memory? Each parallel page needs roughly 300-500 MB; 4 GB is enough for the default 3 parallel pages.

What the results look like

Ultimate SEO Audit: result cards from a real run

Screenshots from a real platform run.

Feedback and reviews

If this Actor saved you time, a short review on its Store page helps other users find it. If something did not work as expected, please open an issue on the Issues tab with your run ID: we read every issue.