SEO Audit Tool & Meta Tag Checker: Crawler, Broken Links
Pricing
from $25.60 / 1,000 audited pages
SEO Audit Tool & Meta Tag Checker: Crawler, Broken Links
SEO audit tool and SEO crawler: audit every page for technical SEO (status codes, redirect chains, titles, meta descriptions, H1s, canonicals, noindex, alt text, hreflang, Open Graph, JSON-LD). Works as a meta tag checker and broken link checker. Every page gets issues and a 0-100 score.
Pricing
from $25.60 / 1,000 audited pages
Rating
0.0
(0)
Developer
Data Done Right
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
This SEO audit tool crawls a website the way a search engine does and checks every page for technical SEO problems: HTTP status codes, redirect chains, titles, meta descriptions, H1s, canonicals, noindex, image alt text, hreflang, Open Graph, structured data (JSON-LD) and broken links. Each page comes back as one row with an issues list and a 0-100 score. A site SUMMARY record groups the duplicate titles, the broken links (with the pages that contain them) and the worst pages. It is built for SEO consultants, agencies, developers and site owners who want a repeatable technical SEO audit they can schedule, export to CSV/Excel or plug into their own tools through the API.
What does this SEO audit check?
For every crawled page:
| Area | What you get | Issues it can raise |
|---|---|---|
| HTTP | statusCode, full redirectChain, responseTimeMs, pageSizeBytes | http-4xx, http-5xx, fetch-failed, redirect-loop, redirected, redirect-chain, slow-response, large-html |
| Title | title, titleLength | title-missing, title-too-long (>60), title-too-short (<30), title-multiple, title-duplicate |
| Meta description | metaDescription, metaDescriptionLength | meta-description-missing, -too-long (>160), -too-short (<70), -multiple, -duplicate |
| Headings | h1, h1Count, headings outline | h1-missing, h1-multiple, heading-level-skipped |
| Indexing | canonical, canonicalIsSelf, robotsMeta, xRobotsTag, indexable, noindex | noindex, nofollow, canonical-missing, canonical-elsewhere, canonical-multiple, meta-refresh |
| Content | wordCount, lang, viewport | thin-content (<200 words), html-lang-missing, viewport-missing |
| Images | imagesCount, imagesMissingAlt, samples | images-missing-alt |
| Links | internalLinks, externalLinks, nofollowLinks, inlinks, brokenLinks, redirectedLinks | broken-internal-links, broken-external-links, redirected-links |
| International | hreflang list | hreflang-invalid |
| Social | openGraph, twitterCard | open-graph-missing, twitter-card-missing |
| Structured data | structuredDataTypes (JSON-LD @types, @graph included), structuredDataErrors, microdataTypes | structured-data-invalid |
| Security | mixedContent (HTTP resources on an HTTPS page) | mixed-content |
Duplicate titles and descriptions are compared across the whole crawl. Pages that are noindex or canonicalized to another URL are left out of the duplicate groups, because they are not competing in search.
Page score: 100 minus a fixed penalty for each distinct issue type (error 15, warning 6, notice 2). A page that returns 4xx/5xx or cannot be fetched scores 0.
How to do an SEO audit of a website
- Enter the Website URL (usually your home page).
- Set Max pages to audit (start with 100) and, if you like, turn on Also audit pages from the sitemap so pages that nothing links to are found too.
- Turn on Check external links if you also want outgoing links checked.
- Run it. Open the dataset to see one row per page (worst pages first), and the
SUMMARYrecord in the key-value store for the site overview. - Export to CSV, Excel or JSON, or schedule the run weekly to catch new problems.
How to check broken links on a website
The crawl already knows the status of every page it visits. In addition, with Check internal links that were not crawled (on by default), every other internal link (pages beyond the page or depth limit, PDFs, images that are linked) gets a quick HEAD request (GET if the server refuses HEAD). With Check external links, each unique outgoing URL is checked once, too. You get:
brokenLinkson each page row: the URL, status code or error (timeout, DNS, connection) and anchor text.brokenLinksinSUMMARY: every broken URL withfoundOnCountand up to 20foundOnpages, internal links first.redirectedLinks: links that point to a redirect instead of the final URL, with the final URL and number of hops.- External sites that refuse bots (401, 403, 429, 999) are listed as
restrictedLinks, not as broken, to avoid false alarms.
Website SEO checker with a score for every page
Every page gets a 0-100 SEO score and a plain list of its issues (missing meta description, duplicate title, broken links, redirect chain, noindex...). Sort by score to see the worst pages first.
SEO audit tool for agencies
Run it for each client site, schedule it monthly, and export to CSV, Excel or Google Sheets for your report. You can also call it from the Apify API, Make, Zapier or n8n.
Use it in Claude, ChatGPT and Cursor
Connect Apify's MCP server (mcp.apify.com) and your AI assistant can audit a site itself. For example: "audit example.com and list the 10 worst SEO problems." The only required input is startUrl.
Input example
{"startUrl": "https://docs.apify.com/","maxPages": 100,"maxDepth": 10,"useSitemap": true,"checkLinks": true,"checkExternalLinks": true,"maxLinkChecks": 1000,"excludeUrlPatterns": ["/tag/", "?sort="],"reportPages": "all"}
reportPages can be all, issues (any issue), warnings (warnings or errors) or errors. You pay only for the pages returned; the SUMMARY always covers every audited page.
Output example
One dataset row per page (shortened, from a real run):
{"url": "https://docs.apify.com/api","statusCode": 200,"score": 74,"issueCount": 7,"errors": 0,"warnings": 3,"notices": 4,"issues": [{"type": "meta-description-missing", "severity": "warning", "message": "No meta description."},{"type": "images-missing-alt", "severity": "warning", "message": "Images without an alt attribute.", "detail": 7},{"type": "title-duplicate", "severity": "warning", "message": "Same title as other pages on the site.", "detail": "2 pages share it"},{"type": "redirected-links", "severity": "notice", "message": "Links that point to a redirect instead of the final URL.", "detail": 1}],"title": "Apify Documentation","titleLength": 19,"metaDescription": null,"h1": ["Apify API documentation"],"canonical": "https://docs.apify.com/api","canonicalIsSelf": true,"indexable": true,"wordCount": 511,"responseTimeMs": 41,"pageSizeBytes": 56631,"redirectChain": [],"inlinks": 9,"internalLinks": 27,"externalLinks": 24,"brokenLinksCount": 0,"redirectedLinks": [{"url": "https://docs.apify.com/cli", "finalUrl": "https://docs.apify.com/cli/docs", "hops": 1, "status": 200, "internal": true}],"imagesMissingAlt": 7,"hreflang": [{"lang": "en", "href": "https://docs.apify.com/api"}, {"lang": "x-default", "href": "https://docs.apify.com/api"}],"openGraph": {"title": "Apify Documentation", "image": "https://apify.com/og-image/docs-article"},"twitterCard": {"card": "summary_large_image"},"structuredDataTypes": [],"mixedContent": []}
The SUMMARY record (key-value store) looks like this:
{"site": "docs.apify.com","pagesAudited": 10,"averageScore": 89.7,"pagesWithErrors": 1,"pagesAffectedByIssue": {"redirected-links": 10, "heading-level-skipped": 8, "images-missing-alt": 3, "broken-internal-links": 1},"worstPages": [{"url": "https://docs.apify.com/api", "score": 74, "issues": ["meta-description-missing", "images-missing-alt"]}],"duplicateTitles": [{"value": "Apify Documentation", "count": 2, "pages": ["https://docs.apify.com/api", "https://docs.apify.com/"]}],"duplicateMetaDescriptions": [],"brokenLinksCount": 1,"brokenLinks": [{"url": "https://docs.apify.com/residential_proxy", "status": 404, "internal": true, "foundOnCount": 1, "foundOn": ["https://docs.apify.com/proxy"]}],"redirectedLinksCount": 6,"stoppedBecause": "maxPages (10) reached; 127 more URLs were queued"}
Problems that did not stop the run (robots.txt unreachable, unreadable sitemap) are listed in notes and in a NOTES record.
How the crawler behaves
- Same site only. It follows links on the start URL's host.
wwwand non-wwwcount as one site; subdomains only when you turn on Include subdomains. If the start URL redirects (http to https, or to a new domain), the final host becomes the site. - Respects robots.txt. It identifies itself as
SEOAuditBot(User-AgentMozilla/5.0 (compatible; SEOAuditBot/1.0; Apify SEO Audit Tool actor; honors robots.txt)), skips disallowed URLs (also when a redirect points into them), honorsCrawl-delayup to 10 s, and does not follow links from pages markednofollow. If robots.txt itself returns a 5xx error or cannot be reached, the site is treated as disallowed (RFC 9309) and the run says so. External link checks are single requests to each linked URL, like a visitor clicking the link; they do not crawl other sites. - Polite by default. 5 parallel requests (adjustable 1 to 10), at most 2 at a time to any external host, one retry on timeouts, 429 and 503.
- Caps that also cap cost: Max pages, Max link depth, Max link checks.
How much does it cost
Pay per event, platform usage included:
page: $0.032 per audited page returned ($32 per 1,000 pages). Internal link checks are included.external-link-check: $0.0008 per unique external URL checked ($0.80 per 1,000), only when Check external links is on.
Example: a 500-page site with 2,000 unique external links costs 500 x $0.032 + 2,000 x $0.0008 = $17.60. When the run's spending limit is near, the actor lowers the page count up front and stops external checks before they would eat into the pages you will receive.
Use cases
- Technical SEO audit for a client site before a proposal or a migration.
- Weekly broken link check on a schedule, exported to Google Sheets or Slack.
- Pre-launch QA: catch noindex left on, missing canonicals, staging links and mixed content.
- Content clean-up: thin pages, duplicate titles and meta descriptions, missing H1s and alt text.
- Agencies and developers: call it through the Apify API and feed the JSON into your own reports.
FAQ
What is a technical SEO audit?
A check of the things that decide whether search engines can crawl, index and understand a site: status codes, redirects, canonicals, robots directives, titles, descriptions, headings, structured data, hreflang and internal links. That is exactly what this actor reports, page by page.
How much does an SEO audit cost?
A manual audit by an agency or consultant is priced by the hour or by the project. The crawl-and-check part costs $0.032 per page here, so a 200-page site is $6.40. You still need a person to decide which fixes matter most.
Is there a free SEO audit tool?
Apify's free plan includes $5 of platform credit every month. That covers a full audit of about 150 pages at $0.032 per page.
How do I check my website's SEO score?
Enter your home page URL and run. Each page row has a score from 0 to 100 and its list of issues, and the run summary gives the site-wide totals.
How do broken link checkers work?
They request every linked URL and read the HTTP status. A 4xx or 5xx status, a timeout or a DNS failure means the link is broken. This tool sends a HEAD request and falls back to GET when a server refuses HEAD, which avoids most false alarms.
Is a broken link checker accurate?
Mostly. Some sites (LinkedIn, some shops behind bot protection) answer automated requests with 403, 429 or 999 even though the page works in a browser. These are reported separately as restrictedLinks rather than as broken.
Does it render JavaScript?
No. It reads the HTML the server sends, like most SEO crawlers in their default mode. Sites that build their content only in the browser (some single-page apps) will show few links and thin content. Server-rendered and static sites (most WordPress sites, docs sites and server-rendered frameworks) work well.
Can I audit a site that blocks crawlers in robots.txt?
No. Disallowed URLs are skipped and listed as skipped. To audit your own staging site, allow SEOAuditBot in its robots.txt.
Limits
- One website per run (run it several times or schedule it for more sites).
- No JavaScript rendering, no login-protected pages, no Core Web Vitals (see the PageSpeed tool below).
- HTML larger than 5 MB is read only up to 5 MB.
- Results are written when the crawl ends (duplicate titles and broken links need the whole site). If the run's timeout is near, the crawl stops early on its own and still delivers what it audited (
stoppedBecausesays so). A run you abort by hand returns nothing. - Images are counted and checked for alt text, but image URLs are not link-checked unless they are linked with
<a href>.
Related tools
- Sitemap Extractor: All URLs + New Pages Monitor: export every URL from a site's sitemaps and get only new pages on later runs.
- Bulk PageSpeed & Core Web Vitals Checker: Lighthouse scores and Core Web Vitals for a list of URLs.
- Keyword Suggestions Tool: Google, YouTube, Amazon, Bing: find the keywords to target once the technical issues are fixed.