Skip to content
Search/
CyberMax › Answers

How to run an SEO audit and broken link check on a whole site

Updated 2026-11-10 · Data and API builders · by CyberMax

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.

  1. Start with the home page (or a section start page). Auditmoss also reads the sitemap, so orphan pages are found too.
  2. Set maxPages: 50 for a quick health check, the full page count for a complete audit.
  3. Turn on checkExternalLinks if you also want outbound links checked (still free).
  4. Fix errors first (4xx/5xx pages, broken links, missing titles), then warnings (duplicate titles and descriptions, missing H1, slow pages).
  5. 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 on

JavaScript / 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".
Real run on Apify (10 Nov 2026: books.toscrape.com, 20 pages audited in 4.8 s; three rows shown)
ScorePageIssuesWordsResponse
72/missing meta description, no canonical, no Open Graph tags, HTTP script on an HTTPS page, duplicate title30835 ms
75/catalogue/category/books/religion_12/missing meta description, no canonical, thin content (176 words)17628 ms
80/catalogue/category/books/travel_2/missing meta description, no canonical, no Open Graph tags, mixed content21996 ms

Source: Auditmoss (Apify Actor cybermax/seo-audit) README, real Apify run on 10 Nov 2026

Run Auditmoss on ApifyLinkheft: domain authority in bulk

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 fee

Auditmoss 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.

You get one email to confirm first. Then the kit, and 5 short emails over two weeks. One-click unsubscribe in every email; we never share your address.

Compare the options

Bulk domain authority checkers compared: Moz DA scrapers vs an open-data scoreLinkheft vs two Moz DA scrapers on Apify: live price per domain, which metric you get, and when you need the r

Related answers

How to check the authority of many domains at once (and what the score means)Rank a list of domains by size and link reach from open web-graph data, what each field means, and when you neHow to check the tech stack of hundreds of websites at onceFind the CMS, framework, CDN, email provider, DMARC policy, domain age and TLS expiry for a whole list of doma