Semalt Platform — Technical audit

Semalt technical audit: 400+ checks Screaming Frog, Sitebulb and Lighthouse do not run

A Riyadh audit is not a London audit. Between RTL Arabic layouts, ar-SA / ar-KW / ar-AE hreflang webs, ministry CMS behaviour, Nafath sign-in redirects and STC Cloud edge quirks, most western crawlers miss the real issues on .com.sa sites. The Semalt technical audit was built with these patterns in mind and runs 412 distinct checks — every one of them prioritised by revenue impact.

Read time: 13 minLevel: SEO / DevUpdated:

Contents

  1. Why generic crawlers fail on Saudi sites
  2. How the Semalt engine crawls
  3. RTL Arabic, mirrored layouts and CLS on dir="rtl"
  4. Hreflang between ar-SA, ar-KW, ar-AE, ar-EG and x-default
  5. INP on Al-Riyadh, Sabq and Okaz templates
  6. Ministry CMS, Nafath and Absher patterns
  7. Case study: a Jeddah e-commerce group, 3.2M URLs
  8. How Semalt prioritises fixes by SAR impact
  9. Semalt vs. Screaming Frog vs. Sitebulb vs. Lighthouse
  10. FAQ
412
Distinct checks
67
Arabic / RTL specific
3.2 M
URLs / hour crawl budget
SAR
Impact scoring currency
Chromium 128 rendering HTTP/3 & QUIC Log-file diff JS-rendered DOM RTL-safe visual diff Nafath aware Ministry CMS profiles Blocked-by-firewall detection

Why generic crawlers fail on Saudi sites

Screaming Frog, Sitebulb, Ahrefs Site Audit and Lighthouse are all excellent tools — but they were built by teams whose reference dataset is Chicago Tribune, John Lewis, Wirecutter. When they meet a Saudi site the failure modes are predictable and repeat across every audit we run:

Semalt was built to close every one of these gaps. We are not going to pretend it is faster than Screaming Frog on a 200-URL site — it is not. What it does is find the issues that actually move traffic on Saudi sites and rank them by expected SAR uplift, not by generic severity.

The most common Saudi audit trap

Half the sites we onboard in Riyadh have their canonical set to the English URL from the Arabic page — because the theme was cloned from an American template. Google then collapses the Arabic version out of the index. Screaming Frog reports this as a “canonical mismatch” but doesn't quantify the loss. Semalt tells you: this canonical error is costing 214,000 SAR/month in organic revenue. That framing changes what happens in the next standup.

Diagram: crawl, render, index, rank — the four stages a page must pass and what breaks at each
Four stages, four different failure modes. An audit is worth doing in this order — fixing rank signals on a page that is not indexed changes nothing.

How the Semalt engine crawls

The audit runs a real Chromium 128 headless browser (not a Node-based HTML parser) from four egress regions: Frankfurt, Bahrain, Dubai and Riyadh. This matters because google.com.sa and google.com return materially different SERPs, and rendering the site from Riyadh reveals the same edge behaviour Google's Saudi-region crawler sees. HTTP/3 and QUIC are respected. JavaScript-rendered content is snapshotted after the load event and 4 seconds later, so single-page apps built on Nuxt, Next.js and SvelteKit produce a stable DOM to audit.

🔍

Rendered DOM diff

Every URL is compared against the raw HTML to expose Googlebot-visible content vs. hydrated content. A widespread bug on Saudi SPA sites — product prices only appearing after client-side hydration — is caught in one crawl.

🎗

Riyadh egress

Latency, TTFB and INP measured from a Riyadh IP, matching what STC and Mobily users experience. Adds around 260ms of realism vs. a Virginia audit.

📑

Log-file diff

Upload 30 days of nginx / Apache logs and Semalt cross-references crawl budget by URL cluster — the fastest way to find where Googlebot is wasting cycles.

🗺

Sitemap sanity

Detects the classic KSA gotcha: 30k URLs in sitemap.xml, 4k in the index. Semalt tells you which cluster is missing and why.

RTL Arabic, mirrored layouts and CLS on dir="rtl"

67 of the 412 audit checks fire only on RTL pages. They exist because bidirectional layout produces failure modes no LTR template ever hits:

Real RTL bugs from Riyadh audits, 2026

Every one of these fires as a separate ticket in the Semalt dashboard with a screenshot, a suggested fix, and an estimated SAR impact based on the affected URLs' current traffic.

Hreflang between ar-SA, ar-KW, ar-AE, ar-EG and x-default

The hreflang graph is where GCC groups (Alshaya, Landmark, Al-Futtaim, Chalhoub) burn six-figure sums every year. A Riyadh site that only declares hreflang="ar" loses its Kuwait and UAE presence to the wrong ar-KW / ar-AE peer. Semalt builds a full hreflang graph across all of a client's domains, validates the reciprocity of every pair, checks that x-default points to the right hub, and reports every orphan.

What Semalt validates on hreflang

  • Reciprocity (A points to B, B points to A)
  • Correct region codes (ar-SA not ar-sa)
  • x-default present and pointing to the correct hub
  • Consistency across sitemap, HTTP header and HTML
  • Canonical does not contradict hreflang
  • No self-loops or dangling edges

What generic crawlers miss

  • The correct ISO-3166 for ar-EG vs. ar-SA
  • Dialect-tag misuse (ar-Saud vs. ar-SA)
  • Cross-domain hreflang between .com.sa and .com.kw
  • Mobile subdomain hreflang orphans
  • Ministry mirror sites with their own hreflang graph

INP on Al-Riyadh, Sabq and Okaz templates

Interaction to Next Paint replaced FID as a Core Web Vital in March 2024. It is the single most under-audited metric on Saudi news sites. Every large-newsroom template we've measured — Al-Riyadh, Sabq, Okaz, Al-Sharq, Al-Watan — ships with third-party ad-tech (Kwanko, Taboola, Outbrain, DFP) that blocks the main thread for 400-800 ms on tap-to-scroll. Semalt runs the CrUX API cross-reference, then loads the URL from a real Mobily-network Riyadh POP and records the actual INP under real ad density.

Typical Saudi news-template INP audit (median 2026)

Homepage INP with third-party ads640 ms · Poor
Article INP mid-scroll (post-hydration)410 ms · Needs work
Sticky-video block INP920 ms · Poor
Post-Semalt-fix homepage INP180 ms · Good

Ministry CMS, Nafath and Absher patterns

Government and semi-government properties in the Kingdom — my.gov.sa, absher.sa, moh.gov.sa, moi.gov.sa, MyGov microsites, Vision 2030 initiative sites — run on a small pool of CMS platforms with well-known SEO quirks. Semalt ships built-in profiles for each of them:

Nafath sign-in redirects (used across almost every ministry service) are followed only as far as the login wall, and the wall itself is verified to return the correct status code and to expose an indexable public preview if declared.

Case study: a Jeddah e-commerce group, 3.2M URLs

A Jeddah-headquartered e-commerce group with four Salla storefronts (a fashion brand, an electronics brand, a beauty brand and a specialty B2B property) ran a Semalt audit in March 2026. Combined URL count: 3.2 million. First crawl took 61 minutes. The top ten findings, in Semalt's revenue-impact order:

#FindingURLs affectedEst. SAR / month
1Canonical points to EN from AR product pages18,400214,000
2Missing hreflang ar-SA ↔ ar-AE across brand hubs2,60096,000
3INP > 500ms on category templates (Mobily edge)4,10074,000
4Duplicate title tags across Salla facet URLs27,00062,000
5404s in internal linking on brand-B (post-migration)1,32041,000
6Blank rendered <h1> on 3 landing pages338,000
7Mixed direction in H1 breaks Product schema86029,000
8Sitemap references 12k noindex URLs12,30022,000
9WebP fallback missing on Safari iOS 15All18,000
10Sticky footer overlaps CTA on RTL Salla themeAll14,000

Total addressable pipeline in the top ten: 608,000 SAR per month. The group fixed items #1, #4, #6 and #10 in the first sprint (dev time: 22 hours) and recovered 314,000 SAR/month of organic revenue by the end of the second Ramadan week.

“We had run Screaming Frog on this site for two years. It flagged the canonical issue as a warning among 8,000 other warnings. Semalt put it at the top of the list with 214,000 SAR next to it. The CTO fixed it that Sunday.”

— head of SEO, Jeddah e-commerce group

How Semalt prioritises fixes by SAR impact

Every finding is scored on three axes: traffic exposure (how many URLs, how much organic click volume), fix cost (a T-shirt estimate of dev hours), and ranking headroom (how much position improvement is realistic in the local SERP). The output is a single number in SAR/month that the SEO team can defend to the CFO. This is the framing that turns audits into commit messages.

412Checks per crawl
67RTL / Arabic specific
SARImpact currency
61 min3.2M URLs crawled

Semalt vs. Screaming Frog vs. Sitebulb vs. Lighthouse

Screaming Frog

GBP 199 / yr
  • Fast on small sites
  • Excellent HTML parsing
  • Custom extraction

Gaps: no RTL awareness, no Riyadh edge, no revenue score.

Sitebulb + Lighthouse

USD 250 / mo
  • Nice visualisations
  • Good hint text
  • Lab-based CWV

Gaps: lab-only CWV, no ministry profiles, no revenue score.

Verdict

Screaming Frog and Sitebulb remain excellent tools for pure engineering QA. For a Saudi site whose SEO owner has to defend a fix backlog to the CFO in Riyal, only Semalt currently ships the combination of Arabic-first checks, Riyadh-edge rendering and revenue-first prioritisation.

FAQ

Can Semalt crawl a ministry site behind Nafath?

Yes for the public-facing surface, up to the Nafath sign-in wall. Semalt validates that the wall returns a correct 302, that the pre-auth pages are indexable if intended, and that no auth tokens leak into the URL. Post-auth crawling can be arranged with a dedicated service account, subject to Ministry approval.

How is INP measured, exactly?

Two ways in parallel: CrUX field data pulled by API, and a live-user-emulation load from a Mobily-network Riyadh POP. When they disagree, the field data wins for reporting and the lab result becomes the debug trace for the fix.

Does the crawl respect our robots.txt and rate limits?

Yes. Default crawl rate is 4 requests / second, adjustable down to 0.5 rps to protect legacy Liferay ministry origins. You can also whitelist Semalt's crawler IP range in your WAF to avoid noisy Cloudflare / STC Cloud challenges.

Does it detect broken hreflang across a whole GCC group?

Yes. Add all sibling domains (.com.sa, .com.kw, .ae, .com.eg) as one project and Semalt builds the full hreflang graph, validates reciprocity of every pair, and reports every orphan URL by region.

Can it re-check only what changed since last week?

Yes. Semalt keeps a versioned index of every audit run and produces a delta report showing new issues, resolved issues and regressions since any prior date. Useful before a Vision 2030 microsite launch or a Ramadan campaign go-live.

Run your first audit

Point Semalt at your .com.sa domain and get the first ten revenue-priced findings in under an hour. You do not need to install anything to see them.

Sign in and run the audit →

Start your first Riyadh-priced audit

Free account, no credit card. Run the 412 checks and see the fixes ranked in SAR per month.

Sign in to Semalt →