How to run an SEO audit and broken link check on a whole site
Short answer
Crawl the site the way a search engine does (sitemap plus internal links, robots.txt respected) and check every page, not just the homepage. Auditmoss on Apify does this in the cloud: each page gets its issues in plain words and a 0-100 score, and the run lists every broken link with the page it sits on. Link checks and the site summary are free; pages cost $0.004 each, so Apify's $5 monthly free credit covers about 1,250 pages.
- Start with the home page (or a section start page). Auditmoss also reads the sitemap, so orphan pages are found too.
- Set maxPages: 50 for a quick health check, the full page count for a complete audit.
- Turn on checkExternalLinks if you also want outbound links checked (still free).
- Fix errors first (4xx/5xx pages, broken links, missing titles), then warnings (duplicate titles and descriptions, missing H1, slow pages).
- Save the input as a task with monitor mode on and schedule it weekly: later runs return only pages whose issues changed.
Copy-paste code
Python (pip install apify-client): site in, worst pages and broken links out
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("cybermax/seo-audit").call(run_input={
"startUrls": ["https://example.com"],
"maxPages": 200,
"checkExternalLinks": True,
})
pages = sorted(client.dataset(run["defaultDatasetId"]).iterate_items(), key=lambda p: p["score"])
for p in pages[:10]: # worst first
print(p["score"], p["url"], "; ".join(p["issueDetails"]))
summary = client.key_value_store(run["defaultKeyValueStoreId"]).get_record("OUTPUT")["value"]
print(summary) # pages audited, average score, every broken link with the page it was found onJavaScript / Node (npm i apify-client)
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('cybermax/seo-audit').call({
startUrls: ['https://example.com'], maxPages: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const p of items.filter((p) => p.brokenLinks?.length)) {
for (const b of p.brokenLinks) console.log(p.url, '->', b.url, b.status);
}No code: n8n, Make or Zapier
n8n: HTTP Request node (or the Apify node, action "Run an Actor and get dataset")
Method: POST
URL: https://api.apify.com/v2/acts/cybermax~seo-audit/run-sync-get-dataset-items
Auth: Header Auth -> Authorization: Bearer <your Apify token>
Body: JSON {"startUrls": ["https://yoursite.com"], "maxPages": 500, "monitor": true}
Output: one n8n item per result row
Make: Apify app -> "Run an Actor" (Actor: cybermax/seo-audit, wait for finish = yes)
-> Apify "Get Dataset Items" (dataset = the run's defaultDatasetId) -> your next module
Zapier: Apify app -> action "Run Actor" (cybermax/seo-audit, input JSON as above)
-> trigger "Finished Actor Run" -> "Fetch Dataset Items" -> your app
Runs longer than 5 minutes: start with POST /v2/acts/cybermax~seo-audit/runs and read the dataset when the run finishes.
Weekly report: Schedule trigger (Monday 06:00) -> the request above -> Google Sheets "Append rows" (url, score, issueDetails, newIssues) -> Slack message when newIssues is not empty.From an AI agent (MCP)
# Any MCP client (Claude Desktop, Claude Code, Cursor, VS Code): Apify's hosted MCP server
{
"mcpServers": {
"seo-audit": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.apify.com/?tools=cybermax/seo-audit",
"--header", "Authorization: Bearer ${APIFY_TOKEN}"],
"env": { "APIFY_TOKEN": "<your Apify token>" }
}
}
}
# The agent sees one tool, cybermax--seo-audit, with the Actor's input schema.
# Ask: "audit example.com and tell me the 5 most important fixes".| Score | Page | Issues | Words | Response |
|---|---|---|---|---|
| 72 | / | missing meta description, no canonical, no Open Graph tags, HTTP script on an HTTPS page, duplicate title | 308 | 35 ms |
| 75 | /catalogue/category/books/religion_12/ | missing meta description, no canonical, thin content (176 words) | 176 | 28 ms |
| 80 | /catalogue/category/books/travel_2/ | missing meta description, no canonical, no Open Graph tags, mixed content | 219 | 96 ms |
Source: Auditmoss (Apify Actor cybermax/seo-audit) README, real Apify run on 10 Nov 2026
What a whole-site SEO audit checks
Per page: HTTP status and redirects, title and meta description (missing, too long, too short, duplicated across the site), H1s, canonical, noindex, images without alt text, thin content, mobile viewport, lang, Open Graph tags, JSON-LD, mixed content, page size and response time. Every row also carries the raw values, so you can build your own rules in a spreadsheet.
Broken link checker for the whole site, free
Every internal link on every audited page is checked (external links too when you turn that on), and each 404 or 5xx comes back with the page it sits on. Link checks never cost anything; only audited pages do.
After the audit: authority and links
On-page fixes are half of SEO. To see how strong a site (or each competitor) is from the outside, Linkheft returns a 0-100 domain authority score and rank from open web-graph data for a whole list of domains.
Good to know
Price on Apify: $0.004 per page audited ($4 per 1,000), no start fee; a 100-page site is $0.40. Link checks, the site summary and pages beyond your limit are free. Apify's free plan includes $5 of usage each month.
Auditmoss reads the HTML the server sends and does not render JavaScript. Sites that build all content in the browser show as thin pages, which is worth knowing for SEO too.
Auditmoss: Crawl any website and get a fix list: SEO issues, broken links and a score per page
$0.004 per page, no start feeAuditmoss crawls a whole site and returns each page's SEO issues, broken links and a 0-100 score, worst first. $0.004 per page; link checks are free.
Runs on your own Apify account, pay per result; failed results are not charged.Questions
Is there a free SEO audit tool for a whole site?
Desktop crawlers have free tiers capped at a few hundred URLs. Auditmoss runs in the cloud with no cap; Apify's $5 monthly free credit covers about 1,250 audited pages, and link checks are always free.
Will it slow my site down?
It sends at most 5 requests at a time by default (lower maxConcurrency for small servers) and follows robots.txt.
Can I audit several client sites in one run?
Yes: put each site in startUrls and you get a summary per site.
Can an AI agent use it?
Yes. Apify's MCP server exposes it as cybermax--seo-audit for Claude, Cursor and other MCP clients.
Free: the Free API Starter Kit
Copy-paste calls for 4 APIs with free daily tiers (CVE priority, VIN recalls, US duty rates, email checks), then 5 short emails on KEV/EPSS, MCP and free data.