SEO Audit Tool provides 40+ comprehensive SEO checks covering page basics, semantic structure, link health, media optimization, technical SEO and more. It outputs standardized JSON results for one-stop website SEO health checks, issue detection and optimization analysis.
Comprehensive on-page SEO analysis with 40+ checks. Supports multi-page crawling with depth control.
Page Basics: URL, Title (length / presence), Meta Description (length / presence), Doctype, charset declaration
Semantic Structure: H1 (presence / uniqueness / content), H2 presence
Link Analysis: Total link count, internal links, external links, broken links (internal & external), internal nofollow links
Media Checks: Image alt attribute detection, broken image detection
Structured Data: JSON-LD extraction, Microdata extraction
Technical SEO: Viewport meta, AMP version, iframe detection, robots.txt accessibility, favicon accessibility, robots blocking tag, Flash detection
Analytics: Google Analytics (global object + tracking function) detection
Content Quality: Word count, content length assessment
page.evaluateno-cors mode (opaque, skipped from broken detection)Important: A
falseboolean, empty string (""), or empty array ([]) means the page genuinely lacks that element. It is NOT a collection failure or data omission.
| Example | Meaning |
|---|---|
isH1: false, h1: "" | The page has no H1 heading |
isJsonLd: false, jsonLdData: {} | The page has no JSON-LD structured data |
isMetaDescription: false, metaDescription: "" | The page has no meta description tag |
brokenLinks: [], brokenLinksCount: 0 | No broken links were found — good |
internalNoFollowLinks: [] | No internal nofollow links — not a problem |
externalBrokenLinks: [] | No broken external links found |
| Parameter | Type | Default | Description |
|---|---|---|---|
startUrl | array | — | One or more page URLs to audit |
maxRequestsPerCrawl | integer | 10 | Maximum pages to crawl (including start URL) |
maxDepth | integer | unlimited | URL path depth limit, e.g./blog/post has depth 2 |
maxRequestRetries | integer | 2 | Maximum retry attempts when a page fails to load |
handlePageTimeoutSecs | integer | 3600 | Maximum time (seconds) for full SEO analysis of a single page |
pageTimeout | integer | 60000 | Page navigation timeout (milliseconds). Raise for SPAs |
userAgent | string | Chrome 84 | Custom User-Agent for desktop or mobile simulation |
viewPortWidth | integer | — | Browser viewport width in pixels, e.g. 1440 |
viewPortHeight | integer | — | Browser viewport height in pixels, e.g. 900 |
seoParams | object | see below | Custom SEO check thresholds (JSON) |
| Sub-parameter | Description |
|---|---|
maxTitleLength | Maximum title length (longer = flagged) |
minTitleLength | Minimum title length (shorter = flagged) |
maxMetaDescriptionLength | Maximum meta description length |
maxLinksCount | Link count cap (above = flagged as too many links) |
maxWordsCount | Minimum word count threshold (below = content too thin) |
outputLinks | Whether to include full internal link lists in output |
workingStatusCodes | HTTP status codes considered healthy |
Each page produces a JSON object with these fields:
| Field | Type | Description |
|---|---|---|
url | string | Page URL |
title | string | Page title |
isLoaded | boolean | Whether the page loaded successfully |
errorMessage | string | Error message when loading fails |
isGoogleAnalyticsObject | boolean | Whether a GA global object is present |
isGoogleAnalyticsFunc | boolean | Whether a GA tracking function is present |
isCharacterEncode | boolean | Whether a charset declaration is present |
isMetaDescription | boolean | Whether a meta description tag is present |
metaDescription | string | Meta description content |
isMetaDescriptionEnoughLong | boolean | Whether meta description length is within recommended range |
isDoctype | boolean | Whether a doctype declaration is present |
isTitle | boolean | Whether a title tag is present |
isTitleEnoughLong | boolean | Whether title length is within recommended range |
isH1 | boolean | Whether an H1 tag is present |
h1 | string | H1 tag text content |
isH1OnlyOne | boolean | Whether exactly one H1 exists |
isH2 | boolean | Whether at least one H2 tag is present |
linksCount | integer | Total link count |
isTooEnoughLinks | boolean | Whether link count is within acceptable range |
internalNoFollowLinks | array | Internal nofollow link URLs |
internalNoFollowLinksCount | integer | Count of internal nofollow links |
brokenLinksCount | integer | Number of broken internal links |
brokenLinks | array | Broken internal link URLs |
externalBrokenLinksCount | integer | Number of broken external links |
externalBrokenLinks | array | Broken external link URLs |
notOptimizedImagesCount | integer | Number of images missing alt attributes |
notOptimizedImages | array | URLs of images missing alt attributes |
brokenImagesCount | integer | Number of broken images |
brokenImages | array | Broken image URLs |
wordsCount | integer | Page body word count |
isContentEnoughLong | boolean | Whether word count meets the minimum threshold |
isViewport | boolean | Whether a viewport meta tag is present |
isAmp | boolean | Whether the page is an AMP page |
isNotIframe | boolean | Whether the page does NOT contain iframes |
pageIsBlocked | boolean | Whether blocked from indexing via robots meta |
isUsingFlash | boolean | Whether Flash content is used |
robotsFileExists | boolean | Whether robots.txt is accessible |
faviconExists | boolean | Whether favicon.ico is accessible |
isJsonLd | boolean | Whether JSON-LD structured data is present |
jsonLdData | object | Parsed JSON-LD data |
isMicrodata | boolean | Whether Microdata structured data is present |
microdata | array | Parsed Microdata items |
Example 1: Audit a single site, crawl up to 10 pages
Example 2: Compare SEO across multiple domains (homepage only)
Yes. You can increase the pageTimeout value (e.g., to 120000 milliseconds) to ensure the page is fully rendered before analysis.
false / "" / [] means the page truly lacks that element, not a crawling failure. It can be directly used as a basis for optimization.
Set maxRequestsPerCrawl to 1, and the tool will only analyze the input starting URL.
isContentEnoughLong based on in the results?It is determined by seoParams.maxWordsCount. The value is true if the page text word count is greater than or equal to this value, otherwise false.
The tool outputs standard structured JSON, which can be directly converted to CSV, Excel, or reports with one click using scripts or platforms.