# Ahrefs Site Audit vs SEOFix on a 37,000-page site: what each one found

> An Ahrefs Site Audit export vs two SEOFix crawls of the same 37,000-page job site, check by check: where Ahrefs found more, and why counts differ.

Source: https://seofix.ai/blog/ahrefs-site-audit-vs-seofix  
Published: 2026-10-11  
Updated: 2026-10-09  
Author: SEOFix Team  
Category: Comparisons  
Tags: Technical SEO, Case studies  
Length: 2,731 words, 12 min read

This Ahrefs Site Audit review is a check-by-check comparison on one real site: jobxdubai.com, a 37,000-page job board. We exported every issue from an Ahrefs Site Audit crawl on 5 October 2026 and set it next to two SEOFix crawls of the same site on 7 and 9 October. Ahrefs was better at external links, structured data and anything that needs Google's SERP data. Its orphan-page count (607 against our 0, then 171) turned out to be mostly a difference in which links each crawler saw, and it exposed a real bug in our sitemap reader. SEOFix's main differences are that it groups issues by page template and is built to be driven by a coding agent.

**Disclosure:** SEOFix is our product and jobxdubai.com is our own site. We did this to find gaps in our crawler, and we fixed several of them before writing this. The Ahrefs data is our own export from our own Ahrefs subscription. Ahrefs facts and prices were checked on their help center and pricing page on 9 October 2026.

## How we ran the comparison

|  | Ahrefs Site Audit | SEOFix crawl 2 | SEOFix crawl 4 |
| --- | --- | --- | --- |
| Crawl date | 5 Oct 2026 | 7 Oct 2026 | 9 Oct 2026 |
| Pages crawled | Not in the export | 37,218 | 38,241 |
| Duration | Not in the export | 5h 42m | 5h 48m |
| Speed | Project setting, not in the export | 2 req/s cap, 108.7 pages/min | 2 req/s cap, 109.9 pages/min (1.85 req/s effective) |
| Server response | Not compared | avg 145 ms, p95 362 ms | avg 121 ms, p95 286 ms |
| HTML read | Rendered with JavaScript ("Is rendered page" = true in the export) | Server HTML | Server HTML |
| Issue types reported | 25 | 17 | 26 |
| Firewall-blocked pages, fetch errors | n/a | 0, 0 | 0, 0 |

Some notes on method, because they explain most of the differences further down:

- **The site changed between crawls.** jobxdubai is a live job board: jobs open and close daily, and between crawl 2 and crawl 4 we changed the job title template and removed some links. Where a SEOFix number moves between 7 and 9 October, that's usually the site, and we say so.
- **Ahrefs ran with JavaScript execution on.** Ahrefs' [settings guide](https://help.ahrefs.com/en/articles/9082329-how-should-i-configure-my-site-audit-settings) says its crawler doesn't render JavaScript unless the "Execute JavaScript" toggle is on; our project has it on. SEOFix reads the HTML the server sends. On a site where some links are added client-side, the two tools see different link graphs.
- **An Ahrefs issues export doesn't list every crawled page.** It lists the pages that triggered an issue. So we can't say exactly how many pages Ahrefs crawled, and "not in the Ahrefs export" means Ahrefs didn't flag it on this crawl, not that Ahrefs has no such check.
- **SEOFix crawl 2 ran before several checks existed.** Some checks were added because of this comparison and need data that crawl 2 didn't store (Open Graph URLs, external redirect probes). Those show "n/a" for crawl 2.
- **Crawl speed.** We crawl jobxdubai at 2 requests per second at night (Dubai time), because a faster crawl slowed the site down for real users once. The longer story is in [how fast should an SEO crawler crawl your site](https://seofix.ai/blog/seo-crawler-slow-down-website).

## Check-by-check: both tools found it

| Check | Ahrefs (5 Oct) | SEOFix crawl 2 | SEOFix crawl 4 |
| --- | --- | --- | --- |
| Non-canonical page in sitemap | 8 | 8 | 4 |
| Orphan page | 607 | 0 | 171 |
| Only one followed incoming internal link (indexable) | 1,152 | 3,713 | 2,169 |
| Title changed since previous crawl | 246 | n/a (first crawl) | 29,485 |
| Meta description changed | 4,075 | n/a (first crawl) | 2,659 |
| Open Graph tags incomplete | 1,023 | n/a | 1,908 |
| Open Graph URL doesn't match canonical | 2 | n/a | 318 |
| External link redirects (3xx) | 308 | n/a | 231 |
| External link broken (4xx) | 80 | 8 | 1 |
| External link timed out | 1 | n/a | 1 |
| Slow page | 78 | 7 | 11 |
| Meta description too long | 1 | 13 | 10 |

The two sitemap-canonical lists matched exactly on 7 October: the same 8 URLs. That's the only row where the definitions line up perfectly and the site hadn't changed.

Several rows look alike but measure different things:

- **Slow page.** Ahrefs' export includes time to first byte, load time and page size. SEOFix's `SLOW_PAGE` only fires when the server takes more than 3 seconds to respond. Ahrefs' 78 is the more useful number if you care about page weight.
- **Meta description too long.** SEOFix's threshold is 155 characters; Ahrefs flagged one page.
- **Open Graph.** SEOFix requires `og:title`, `og:description`, `og:image` and `og:url`; Ahrefs' "valid Open Graph" set is different, so 1,023 vs 1,908 isn't a like-for-like count. The 318 `OG_URL_MISMATCH` rows on 9 October are almost all our paginated `/jobs/browse/[id]` pages, which set `og:url` to `/jobs` while their canonical points at themselves. That's a real bug on our site.
- **Change detection.** Both tools compare against their own previous crawl, and Ahrefs can also [filter titles that changed](https://ahrefs.com/blog/monitor-and-track-changes-on-a-website/) in Page Explorer. The baselines differ, so the counts can't be compared. More on the 29,485 below.

## Only in the Ahrefs export

| Ahrefs issue | Rows | Why SEOFix didn't report it |
| --- | --- | --- |
| Changed pages not submitted to IndexNow | 5,326 | Left out on purpose: SEOFix submits new and changed pages to IndexNow itself after each audit |
| Structured data has schema.org validation error | 4 | `STRUCTURED_DATA_INVALID` only checks JSON syntax, `@context` and `@type` |
| Structured data has Google rich results validation error | 2 | No Google rich-results rules in SEOFix |
| Page and SERP titles do not match | 19 | Needs SERP data; SEOFix has none |
| SERP title changed | 1 | Same |
| Slow server response for AI crawlers | 26 | SEOFix has an opt-in sample check (20 pages, GPTBot user agent); it wasn't switched on |
| JavaScript redirects / page has redirected JavaScript | 1 / 1 | Cloudflare Turnstile's `api.js` answers 302; SEOFix doesn't fetch script files |
| 3XX redirect | 3 | The http and www host redirects. SEOFix flags a redirect only when a link, the sitemap or a canonical uses it |
| HTTP to HTTPS redirect | 1 | `http://jobxdubai.com/` itself; SEOFix flags http links, not the host redirect |
| Redirect chain | 1 | SEOFix found no chain on its crawls |

Ahrefs wins on the structured-data and SERP rows, and we don't pretend otherwise. The rich-results errors were on our `/ats` page, which carries `BreadcrumbList` and `FAQPage` markup and, by Ahrefs' estimate, gets about 1,200 organic visits a month. If structured data drives your traffic, Ahrefs (or Google's Rich Results Test, one URL per template) catches things SEOFix can't. The SERP-title rows come from Ahrefs' keyword database: it knows that Google shows "Free ATS Resume Checker UAE" for a page whose `<title>` says something else. A crawler without search data can't know that.

The Turnstile row is accurate but not actionable for us: it's Cloudflare's script, and Cloudflare decides where it redirects.

The IndexNow row is a product difference. Ahrefs' issue lists pages with content changes, new redirects and removals, and you can [submit them manually or turn on auto-submission](https://help.ahrefs.com/en/articles/9317209-how-to-submit-pages-to-indexnow-within-site-audit), which Ahrefs says needs a project "upgrade boost". SEOFix sends new and changed pages after every audit once the key file is verified ([IndexNow](https://seofix.ai/help/indexnow)), so there's nothing to report. Neither reaches Google, which doesn't use IndexNow.

## Only in SEOFix (no row in the Ahrefs export)

| SEOFix check | Crawl 2 | Crawl 4 | Note |
| --- | --- | --- | --- |
| `DUPLICATE_TITLE` | 5,923 | 310 | Dropped after we changed the job title template |
| `DUPLICATE_META_DESCRIPTION` | 1,709 | 620 |  |
| `INDEXABLE_NOT_IN_SITEMAP` | withheld (bug) | 1,316 | See the sitemap section |
| `BROKEN_INTERNAL_LINK` | 0 | 266 | Pagination links to `/jobs/browse/306` and `/307`, which returned 404 |
| `BROKEN_PAGE` | 0 | 2 | The same two URLs |
| `REDIRECTED_INTERNAL_LINK` | 566 | 0 | Links to `/hub` (a 308 to `/knowledge-hub`); we removed them between crawls |
| `H1_CHANGED` | n/a | 332 |  |
| `BECAME_NOINDEX` | n/a | 124 | City and category listing pages, e.g. `/jobs/umm-al-quwain/category/finance-and-accounting` |
| `NOINDEX_RECEIVES_TRAFFIC` | 1 | 21 | Uses Search Console clicks |
| `NOFOLLOW_INTERNAL_LINK` | 145 | 145 |  |
| `TITLE_TOO_LONG` | 100 | 21 |  |

Ahrefs has checks for duplicate and long titles too; on this crawl it didn't report them, probably because its thresholds and duplicate rules differ. The 266 broken internal links are new on 9 October. On crawl 2 the site had 299 pagination pages and every page link worked. On crawl 4, every `/jobs/browse` page linked to pages 306 and 307, which answered 404. The pagination linked past its own last page. That's ours to fix, and it's the kind of thing a weekly crawl is for.

## The orphan pages: 607 vs 0 vs 171

This was the number that made us look harder at our own crawler.

**Why SEOFix said 0 on 7 October.** SEOFix only flags a sitemap URL that answered 200 and that no crawled page links to ([structure checks](https://seofix.ai/help/checks-structure)). Our crawler read sitemap files only up to 5 MB, and jobxdubai's `jobs.xml` is 5.9 MB with 30,729 URLs. The file was dropped without an error, so there were almost no sitemap URLs to test. The same bug produced 30,997 false "indexable page not in sitemap" notices, which we pulled from the report. The cap is now 50 MiB per file, the sitemap protocol limit, and the crawl records whether the sitemap was read completely (`sitemap_complete`, true on crawl 4).

**Why SEOFix said 171 on 9 October.** With the sitemap read in full, 170 of the 171 were `/jobs/[slug]` pages listed in `jobs.xml` that no crawled page linked to.

**Why Ahrefs said 607.** All 607 came from `jobs.xml`, and Ahrefs reports zero href inlinks for each one. We matched the 607 URLs against our crawls:

- SEOFix crawled 605 of them on 7 October and found followed internal links to all 605. On 9 October it found links to 592 and flagged 6 as orphans.
- 598 of the 605 were linked from `/jobs/browse/[id]` pagination pages, and 417 from other job pages (related jobs).
- No `/jobs/browse/2` or higher URL appears anywhere in the 35 files of the Ahrefs export.

So most of the 607 had links that our crawler saw two days later, from pages that Ahrefs' export never mentions. We can't see Ahrefs' full list of crawled pages, so we can't say which of these explains it:

- **Ahrefs didn't reach the pagination pages.** Ahrefs' own help center says pages are reported as orphans when they ["were found in the sitemap rather than on the website"](https://help.ahrefs.com/en/articles/4756073-why-are-my-pages-being-reported-as-orphan-pages-when-they-are-not). A crawl that stops early has that effect. Ahrefs [plans](https://help.ahrefs.com/en/articles/6117209-what-s-the-difference-between-all-ahrefs-credit-based-plans) cap Site Audit at 25,000 pages per project on Lite and 50,000 on Standard, and project settings can set a lower limit and a maximum depth.
- **The site changed.** Job listings rotate daily, so the set of pages linking to a given job on 5 October isn't the set on 7 October.

What to do with your own orphan report, in any tool: open a sample of the "orphans" and check whether the pages that should link to them were crawled at all. In Ahrefs, the ["Source" column](https://help.ahrefs.com/en/articles/4860478-how-to-find-the-page-source-in-your-site-audit-report) shows whether a URL was found on the website, in a sitemap or through backlinks. A big orphan count on a paginated site often means the pagination wasn't crawled, not that the pages are unlinked.

## One incoming link: 1,152 vs 3,713, and they barely overlap

Both tools count followed links from other pages. They still disagree, and in both directions. Of Ahrefs' 1,152 pages, SEOFix crawled 1,143 on 7 October and flagged only 192; the rest had two or more followed links in our crawl. SEOFix flagged another 3,521 that Ahrefs didn't.

The likely causes are the ones above: Ahrefs reads rendered HTML, SEOFix reads server HTML, and a job board's link graph changes every day. On 9 October SEOFix's count fell to 2,169 without any change to the check, which shows how much of this number is the site moving. Treat "one incoming link" as a list to sample on large, fast-changing sites, not a count to track week to week.

## External links: Ahrefs checks far more of them

Ahrefs reported 308 external redirects and 80 broken external links; SEOFix found 231 and 1 on 9 October. jobxdubai links to 31,682 distinct external URLs, mostly "Apply on company site" links. SEOFix [probes at most 500 distinct external URLs per audit](https://seofix.ai/help/checks-links-and-redirects), about 1.6% of them here, to keep audits fast and polite to other people's servers. Ahrefs' 80 broken targets (403s, 404s, 410s on employers' career sites) are real. If external link rot matters to you, Ahrefs' coverage is much better on a site like this.

## Title changed on 29,485 pages: what change detection is for

Between 7 and 9 October we changed the job title template. SEOFix's crawl 4 reported:

| Template | `TITLE_CHANGED` rows |
| --- | --- |
| `/jobs/[slug]` | 27,145 |
| `/salaries-2026/[slug]` | 1,893 |
| `/company-profiles/industries/[slug]` | 362 |
| `/jobs/[id]` | 63 |
| other templates | 22 |

A typical row:

```
TITLE_CHANGED  /jobs/li-4472570138-housekeeping-team-leader
old: Housekeeping Team Leader — Manama | JobXDubai
new: Housekeeping Team Leader at ibis, ibis Styles, Manama
```

That one was deliberate. Some of the salary-page rows show a fix we made: "QA/QC Manager Salary in Sharjah 2026: AED" became "QA/QC Manager Salary in Sharjah 2026: AED 29,750–38,250", because the old template printed the label without the range.

Ahrefs has the same kind of notice, so the useful difference is the grouping. 29,485 rows are four lines once they're [grouped by template](https://seofix.ai/help/fixing-by-template), and one of those lines answers "did the job template change?". A per-URL list of 29,485 rows answers the same question only after you sort it yourself. Sitebulb also [groups pages by template](https://support.sitebulb.com/en/articles/9854040-html-page-templates), so this isn't unique to SEOFix; Ahrefs' export is per URL.

## What we changed in our crawler because of this

We read all 35 files of the Ahrefs export and wrote down every issue we didn't cover. From that list we:

- raised the sitemap cap from 5 MB to 50 MiB and added a `sitemap_complete` flag, so "not in sitemap" checks are skipped when a sitemap couldn't be read in full;
- added `SITEMAP_URL_NOT_CANONICAL`, `ONE_INCOMING_LINK`, `EXTERNAL_REDIRECT`, `EXTERNAL_TIMEOUT`, `OG_TAGS_INCOMPLETE` and `OG_URL_MISMATCH`, each modelled on an Ahrefs issue in the export;
- added change checks: `TITLE_CHANGED`, `META_DESCRIPTION_CHANGED`, `H1_CHANGED`, `BECAME_NOINDEX` and `BECAME_INDEXABLE`;
- split external timeouts out of `BROKEN_EXTERNAL_LINK`, where they used to be reported as errors.

We deliberately didn't copy the IndexNow notice (we submit instead) or the SERP-title checks (we have no SERP data). Rich-results validation is still missing, and we say so on our [issue reference](https://seofix.ai/help/issue-reference).

## What each costs to crawl this site weekly

Prices from Ahrefs' [pricing page](https://ahrefs.com/pricing) and [plan comparison](https://help.ahrefs.com/en/articles/6117209-what-s-the-difference-between-all-ahrefs-credit-based-plans), checked 9 October 2026. A weekly crawl of 38,241 pages is about 165,700 pages a month.

- **Ahrefs Lite ($129/month)** caps Site Audit at 25,000 pages per project, so it can't crawl this site in one go. **Standard ($249/month)** allows 50,000 pages per project and 500,000 crawl credits a month. Ahrefs [only charges credits](https://help.ahrefs.com/en/articles/3119402-how-are-site-audit-credits-spent) for internal HTML pages that answer 200, and the first 5,000 credits a month on each verified project are free. Standard also includes the backlink and keyword tools.
- **SEOFix Starter** on the 500k tier is $79/month (125,000 pages per audit). On 7 October the site fit the $39 tier (37,500 pages per audit); at 38,241 pages it no longer does. SEOFix charges a credit for every URL it fetches, redirects and 404s included, and 0.2 for a page that answers `304 Not Modified` ([plans and credits](https://seofix.ai/help/plans-and-credits)).

The full table with Semrush, SE Ranking, Screaming Frog, Sitebulb and JetOctopus is in [Ahrefs Site Audit alternatives for large sites](https://seofix.ai/blog/ahrefs-site-audit-alternatives-large-sites).

## Which should you use

**Use Ahrefs** if you need backlinks, keywords, SERP data or rich-results validation, or if your site links out to thousands of external pages you need checked. You're probably paying for it already for the backlinks, and Site Audit is a solid crawler that found real problems on our site that ours didn't.

**Use SEOFix** if the people fixing issues are developers or a coding agent. Issues arrive grouped by template, so one fix task maps to one file in your codebase. An agent can read them through the MCP server or REST API, change the template, and call Verify fix, which re-fetches up to 200 affected URLs in seconds ([verify a fix](https://seofix.ai/help/verify-fix)). It also tells firewall challenges apart from broken pages. jobxdubai challenges `/jobs/*` for anything that isn't a browser or a verified bot, and SEOFix gets through with a secret header we added to the Cloudflare rule. If that header were missing, it would report the section as blocked, not as 30,000 broken pages.

Plenty of teams will want both: Ahrefs for search data and a monthly check, and a cheaper weekly crawl wired into the place where fixes happen.

---

Run the same comparison on your own site: export all issues from your latest Ahrefs Site Audit crawl, then run a [free SEOFix audit](https://seofix.ai/) of up to 500 pages and put the two side by side.
