Comparisons

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

We put an Ahrefs Site Audit export next to two SEOFix crawls of our own 37,000-page job site. Ahrefs found things we missed, some counts disagree for good reasons, and we changed our crawler because of it.

By SEOFix TeamPublished Updated
2,731 words · 12 min readMarkdown
Ahrefs Site Audit vs SEOFix on a 37,000-page site: what each one found

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 AuditSEOFix crawl 2SEOFix crawl 4
Crawl date5 Oct 20267 Oct 20269 Oct 2026
Pages crawledNot in the export37,21838,241
DurationNot in the export5h 42m5h 48m
SpeedProject setting, not in the export2 req/s cap, 108.7 pages/min2 req/s cap, 109.9 pages/min (1.85 req/s effective)
Server responseNot comparedavg 145 ms, p95 362 msavg 121 ms, p95 286 ms
HTML readRendered with JavaScript ("Is rendered page" = true in the export)Server HTMLServer HTML
Issue types reported251726
Firewall-blocked pages, fetch errorsn/a0, 00, 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 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.

Check-by-check: both tools found it

CheckAhrefs (5 Oct)SEOFix crawl 2SEOFix crawl 4
Non-canonical page in sitemap884
Orphan page6070171
Only one followed incoming internal link (indexable)1,1523,7132,169
Title changed since previous crawl246n/a (first crawl)29,485
Meta description changed4,075n/a (first crawl)2,659
Open Graph tags incomplete1,023n/a1,908
Open Graph URL doesn't match canonical2n/a318
External link redirects (3xx)308n/a231
External link broken (4xx)8081
External link timed out1n/a1
Slow page78711
Meta description too long11310

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 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 issueRowsWhy SEOFix didn't report it
Changed pages not submitted to IndexNow5,326Left out on purpose: SEOFix submits new and changed pages to IndexNow itself after each audit
Structured data has schema.org validation error4STRUCTURED_DATA_INVALID only checks JSON syntax, @context and @type
Structured data has Google rich results validation error2No Google rich-results rules in SEOFix
Page and SERP titles do not match19Needs SERP data; SEOFix has none
SERP title changed1Same
Slow server response for AI crawlers26SEOFix has an opt-in sample check (20 pages, GPTBot user agent); it wasn't switched on
JavaScript redirects / page has redirected JavaScript1 / 1Cloudflare Turnstile's api.js answers 302; SEOFix doesn't fetch script files
3XX redirect3The http and www host redirects. SEOFix flags a redirect only when a link, the sitemap or a canonical uses it
HTTP to HTTPS redirect1http://jobxdubai.com/ itself; SEOFix flags http links, not the host redirect
Redirect chain1SEOFix 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, which Ahrefs says needs a project "upgrade boost". SEOFix sends new and changed pages after every audit once the key file is verified (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 checkCrawl 2Crawl 4Note
DUPLICATE_TITLE5,923310Dropped after we changed the job title template
DUPLICATE_META_DESCRIPTION1,709620
INDEXABLE_NOT_IN_SITEMAPwithheld (bug)1,316See the sitemap section
BROKEN_INTERNAL_LINK0266Pagination links to /jobs/browse/306 and /307, which returned 404
BROKEN_PAGE02The same two URLs
REDIRECTED_INTERNAL_LINK5660Links to /hub (a 308 to /knowledge-hub); we removed them between crawls
H1_CHANGEDn/a332
BECAME_NOINDEXn/a124City and category listing pages, e.g. /jobs/umm-al-quwain/category/finance-and-accounting
NOINDEX_RECEIVES_TRAFFIC121Uses Search Console clicks
NOFOLLOW_INTERNAL_LINK145145
TITLE_TOO_LONG10021

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). 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". A crawl that stops early has that effect. Ahrefs 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 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.

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.

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, 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:

TemplateTITLE_CHANGED rows
/jobs/[slug]27,145
/salaries-2026/[slug]1,893
/company-profiles/industries/[slug]362
/jobs/[id]63
other templates22

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

What each costs to crawl this site weekly

Prices from Ahrefs' pricing page and plan comparison, 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 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).

The full table with Semrush, SE Ranking, Screaming Frog, Sitebulb and JetOctopus is in Ahrefs Site Audit alternatives for 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). 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 of up to 500 pages and put the two side by side.

ShareXLinkedIn