Skip to content

Arabic hreflang, lang and dir: An Audit of 29 Arab Brand Websites

Arabic hreflang, lang and dir: An Audit of 29 Arab Brand Websites
  • Reading time 14 min
  • Summarize with AI
  • Oct. 2, 2026

Most bilingual Arab websites declare language and direction, but many get it wrong. On 2 October 2026 we read the live markup of 29 Arab brand homepages: 9 (31%) had no hreflang in the page head, 7 of the 20 hreflang sets lacked x-default, and 3 of 27 Arabic pages declared a wrong or empty lang.

Key takeaways

  • 20 of 29 homepages carry hreflang in the head. Egypt lags: 4 of 9 Egyptian sites have none, against 5 of 20 in the Gulf.
  • Two sets were broken: ar-SA and en-SA on one URL, and an Arabic page that lists only its English alternate.
  • 3 of 27 Arabic pages declare lang=”en”, an empty lang, or ar-SA on an Egyptian site. Another 3 omit dir.
  • Google ignores lang for language detection. Screen readers, spell-checkers, fonts and Bing do not.
  • Use plain ar unless content changes by country, and keep a generic ar page as the catch-all.

The crawl in numbers: 29 Arab brand homepages

Across 29 Arab brand homepages crawled on 2 October 2026, hreflang appeared on 20 and was missing on 9. Language and direction were mostly right: 24 of 27 Arabic pages declared a correct lang, and 24 of 27 set dir on the html element. Egyptian sites carried 4 of the 6 lang and dir defects.

Two homepages served English by default, so the Arabic-page base is 27.

Country Sites reached Arabic pages hreflang in head x-default (of sets) Wrong or empty lang dir missing on html
Saudi Arabia 9 9 7 5 of 7 1 1
UAE 7 6 5 3 of 5 0 0
Egypt 9 8 5 2 of 5 2 2
Qatar 2 2 2 1 of 2 (1 not verifiable) 0 0
Kuwait 2 2 1 1 of 1 0 0
Total 29 27 20 (69%) 12 of 20 3 of 27 3 of 27

A regional retailer that geo-redirected us to its Egypt store sits in the UAE row. With 2 to 9 sites per country, treat the Egypt gap as a pattern to check, not a market statistic.

How we checked

VOCTOS team, 2 October 2026, desktop Chrome, logged out, connection in Cairo. One page per brand: the Arabic homepage (/ar or the brand’s Arabic locale), else the default homepage. After load we waited 3 to 4.5 seconds and read the live DOM with JavaScript: html lang and dir, computed body direction, hreflang links and the canonical.

Limits: one visit per site; markup injected after 4.5 seconds is missed. Sitemaps and HTTP headers were not read, so “no hreflang” means none in the head. Return links were not checked. No Core Web Vitals field data. 8 of 37 homepages (22%) returned a bot challenge or blank page and are excluded.

Which hreflang mistakes did we find, and what do they break?

Two of the 20 hreflang sets were broken outright, and 7 of 20 lacked x-default. The broken ones fail Google’s core rules: each language version needs its own URL, and each page must list itself plus every alternate. A missing x-default counts as a gap rather than an error, since Google recommends it without requiring it.

Same URL for two languages. A Saudi pharmacy declares ar-SA, en-SA and x-default, all pointing to one URL. The set claims a single page is both the Arabic and the English version, so Google has nothing to swap. Give English its own URL, or drop the annotation until it exists.

No self-reference. An Egyptian bank’s Arabic page lists only its English alternate. Google’s localized versions guide says each version must list itself and all others, and that annotations count only when two pages point at each other. We read the Arabic page only, so whether the English page links back is unknown.

Missing x-default. 7 sets have none: 2 Saudi, 2 UAE and 3 Egyptian. The biggest sets were a Qatari airline with 129 alternates, a regional retailer with 11 across five countries, and a UAE property portal with 9 languages and no x-default.

Should an Arabic page use ar, ar-SA or ar-EG?

Use plain ar unless the Arabic content changes by country. Google accepts a language code on its own and treats the region as an optional second code. Reach for ar-SA, ar-AE or ar-EG when prices, currency, stock, delivery or legal text differ, and keep one generic ar page as the catch-all for every other Arabic speaker.

Google supports ISO 639-1 language codes plus optional ISO 3166-1 Alpha 2 regions, nothing else. Three Arabic traps follow:

  • Dialect codes fail. arz (Egyptian Arabic) and arb (Standard Arabic) are not ISO 639-1, so Google ignores them. The W3C also prefers ar over arb.
  • A country code alone is another language. In the ISO 639 list, sa is Sanskrit and ae is Avestan.
  • Three-letter regions do nothing. ar-KSA and ar-UAE are invalid. Use SA, AE, EG, QA, KW, OM, BH or JO.

In our crawl, 8 of 20 sets used region codes and 11 used language-only codes (the 129-alternate list was not classified). If you run ar-SA and ar-EG, Google advises a catch-all; without a plain ar page, a searcher in Jordan falls through to x-default. For country-specific branches, see our multi-branch local SEO guide.

A correct head for an Arabic page with Saudi and Egyptian variants

A correct Arabic head declares lang and dir on the html element, a self-referencing canonical, and an identical hreflang set on every version: generic Arabic, Saudi Arabic, Egyptian Arabic, English and x-default. The example below is the generic Arabic page. Each sibling repeats the same five alternates and changes only its canonical and lang.

<!doctype html>
<html lang="ar" dir="rtl">
<head>
  <meta charset="utf-8">
  <title>Arabic page title</title>
  <link rel="canonical" href="https://example.com/ar/">

  <!-- Identical set on all five versions, each listing itself -->
  <link rel="alternate" hreflang="ar" href="https://example.com/ar/">
  <link rel="alternate" hreflang="ar-SA" href="https://example.com/ar-sa/">
  <link rel="alternate" hreflang="ar-EG" href="https://example.com/ar-eg/">
  <link rel="alternate" hreflang="en" href="https://example.com/en/">
  <link rel="alternate" hreflang="x-default" href="https://example.com/">
</head>

On the Saudi page the canonical becomes /ar-sa/ and lang stays ar or becomes ar-SA; the W3C advises the shortest tag that does the job. The English page gets lang=”en” and no dir=”rtl”. Every href is fully qualified, as Google requires, and x-default points at the language selector.

If you would rather hand your live set to someone else: check my Arabic and English hreflang against Search Console.

How do canonical tags and hreflang work together?

Each language version should canonicalise to itself, and every hreflang URL should be that canonical URL. Google’s canonical guidance says to pick a canonical in the same language. Pointing the Arabic page’s canonical at the English page asks Google to treat Arabic as a duplicate, which contradicts the hreflang pair.

  • Match each hreflang href to the canonical exactly: protocol, host, trailing slash and case.
  • Keep parameter URLs such as ?currency=SAR out of the set.
  • Translate the main content: Google counts localized pages as duplicates only when it stays untranslated, so Arabic menus around English body text are a risk.
  • In Search Console’s URL Inspection, compare the declared and Google-selected canonical for each language.

One Kuwaiti bank homepage had neither hreflang nor a canonical. For what hosted store platforms output, see our Salla vs Zid SEO audit of 20 Saudi stores.

Head, sitemap or HTTP header: where should hreflang live?

Pick one method. Google treats HTML link elements, HTTP Link headers and XML sitemaps as equivalent, and says running all three brings no Search benefit, only harder maintenance. Use the head for small sets, the sitemap for large sets or many templates, and the HTTP header for PDFs and other non-HTML files.

The head is easiest to inspect, but every page carries the whole set. The Qatari airline’s 129 alternates sit in one homepage’s HTML; at roughly 85 bytes per line, our estimate is about 11 KB of raw markup before compression, on every page view.

A sitemap moves that weight out of the page: declare the xhtml namespace and list every variant, including itself, under each URL. Google says these child links do not count toward the sitemap URL limit. The HTTP header suits an Arabic price-list PDF:

Link: <https://example.com/ar/prices.pdf>; rel="alternate"; hreflang="ar",
      <https://example.com/en/prices.pdf>; rel="alternate"; hreflang="en"

Does Google read the html lang attribute?

Not to detect language. Google determines a page’s language from its visible content and does not use lang, hreflang or the URL for that job. lang still matters: screen readers use it to choose pronunciation, browsers use it for fonts and spell-checking, and Bing has documented content-language and html lang as location signals.

Google’s multi-regional guidance says it does not use “any code-level language information such as lang attributes”.

  • WCAG 2.2 criterion 3.1.1 (Level A) requires a programmatically determined page language, and MDN names screen-reader pronunciation as the main purpose. A lang=”en” Arabic page tells your users’ screen readers to use English rules.
  • For typography, the W3C notes that lang selects relevant fonts and affects spell-checking; an empty lang means unknown. Our Arabic web fonts study covers the font side.
  • For translation, MDN says Google Translate respects translate=”no”, so put it on brand names and product codes.
  • Bing’s 2011 webmaster post, the most specific Bing guidance we found, ranks the content-language meta tag above html lang (archived copy). The W3C says never to use that meta tag. Set html lang correctly and, if Bing traffic matters, send a Content-Language HTTP header instead.

dir, logical CSS and bdi: handling mixed Arabic and Latin text

Put dir=”rtl” on the html element, write layout with logical CSS properties, and isolate every Latin run inside Arabic text. The W3C says never to apply base direction with CSS alone. Phone numbers, prices, SKUs and user names break first, and dir=”auto” or bdi fixes most of them.

On the Saudi bank page missing dir, the body computes as LTR and RTL is applied lower in the tree. Direction inherits, so a modal, cookie banner or chat widget rendered outside that wrapper falls back to LTR. Below, uppercase stands in for Arabic text, as in W3C examples.

/* Logical properties flip with dir, no RTL override file needed */
.card {
  margin-inline-start: 1rem;      /* left in LTR, right in RTL */
  padding-inline-end: 0.5rem;
  border-inline-start: 3px solid;
  text-align: start;
}

<!-- Phone numbers and inputs keep LTR order -->
<p>CALL US ON <span dir="ltr">+966 11 000 0000</span></p>
<input type="tel" name="phone" dir="ltr">

<!-- Product codes inside Arabic sentences -->
<p>MODEL <bdi>SM-A556E</bdi> IS IN STOCK</p>

<!-- User content of unknown direction -->
<p dir="auto">{{ review_text }}</p>

margin-inline-start has been Baseline since January 2020, so logical properties need no fallback. dir=”auto” takes direction from the first strong character. bdi isolates a run when there is no element to hang dir on.

Should URL slugs be Arabic or transliterated?

Both work for Google. Its URL structure guide accepts localized words, asks for UTF-8, and wants non-ASCII characters percent-encoded in href attributes. Arabic slugs match the searcher’s language. Transliterated slugs stay short. Pick one convention per site and use the identical encoded form in hreflang, canonical and sitemap.

Each Arabic letter takes two bytes in UTF-8, so it becomes six characters once encoded. Google’s own example, the five-letter Arabic word for mint, turns into %D9%86%D8%B9%D9%86%D8%A7%D8%B9: 30 characters. A five-word slug of about 25 letters passes 150 characters encoded.

Transliteration has no single spelling convention, so one brand ends up with several spellings of the same word. Our position: Arabic slugs on Arabic pages, English slugs on English pages, hreflang to join them.

WordPress: what TranslatePress, WPML and Polylang print

All three plugins output hreflang automatically, but their x-default behaviour differs. Before trusting any of them, confirm your theme prints language_attributes() inside the html tag. That one function is where WordPress writes both lang and dir=”rtl” for an Arabic site, and a hard-coded html tag bypasses it.

  • Your theme’s header.php should open with <html <?php language_attributes(); ?>>. The source adds dir=”rtl” when is_rtl() is true and takes lang from the site language. A literal <html lang="en"> overrides both.
  • WPML’s documentation says the plugin inserts and updates hreflang on original and translated pages automatically.
  • Polylang’s guide says hreflang is automatic, but x-default appears only on the auto-redirected homepage.
  • TranslatePress’s advanced settings print country and region-independent hreflang by default, offer an HTML lang format option, and make x-default a per-language switch.

A 10-minute hreflang, lang and dir audit

Ten minutes covers one template pair: view-source for what the server sends, DevTools for what the browser ends up with, a crawler for return links, and Search Console for what Google chose. Run it on the homepage, one category or service page and one article, in Arabic and English. Six URLs catch most template-level faults.

  1. View-source (Ctrl+U): lang and dir sit on the html element in the raw HTML.
  2. In the DevTools console, run [document.documentElement.lang, document.documentElement.dir, getComputedStyle(document.body).direction]. Expect ar, rtl, rtl.
  3. List the set: [...document.querySelectorAll('link[rel=alternate][hreflang]')].map(l => l.hreflang + ' ' + l.href).
  4. Each value maps to a unique URL, the page lists itself, and x-default exists.
  5. Open one alternate and confirm it links back.
  6. The canonical matches the current URL and language.
  7. curl -sI https://example.com/ar/ shows any Link or Content-Language header.
  8. Crawl with hreflang enabled; Screaming Frog’s hreflang report flags missing return links, self-references and x-default.
  9. Run URL Inspection on each language version. The International Targeting report is deprecated, so skip it.
  10. On mobile, check a phone number, a price and a product code render in the right order.

Our read

Most Arab sites in our crawl have the markup. Fewer have it consistent. We would fix lang and dir first, because they cost one line and serve every visitor. Then make hreflang boring: language-only codes, one generic Arabic page, x-default on every set, and a sitemap once a set grows past about 20 alternates.

That 20 is our rule of thumb, not a Google limit. Egyptian teams have the most to gain: 4 of 9 Egyptian homepages had no hreflang in the head.

A better test than “do we have hreflang?” is whether each Arabic URL tells the same story in four places: lang, dir, hreflang and canonical. If all four agree on your top templates, move the set to a sitemap and audit quarterly. If they disagree, fix the html element first and the head second. Audit my Arabic templates for lang, dir and hreflang.

FAQ

Do I need hreflang if Arabic and English are on the same domain?

Yes, if both versions have their own URLs. hreflang has nothing to do with domains; it links language versions of the same page wherever they live. Google’s rules apply to /ar/ and /en/ folders exactly as to separate domains: fully qualified URLs, a self-reference on each page, and return links from every alternate.

Should a Saudi website use ar-SA or just ar?

Use ar unless the Arabic content differs by country. Google accepts a language code on its own, and the region code is optional. Add ar-SA when Saudi pages carry their own prices, stock or legal text, and keep a generic ar page so Arabic speakers in Egypt, Jordan or Morocco get a sensible match.

Google ignores the lang attribute, so why should I fix it?

Because Google is one reader among several. Screen readers use lang to choose pronunciation, browsers use it for fonts and spell-checking, and WCAG 2.2 makes a programmatically determined page language a Level A requirement. Bing’s webmaster guidance lists html lang among its location signals. Fixing it is one line in the template.

My hreflang points ar-SA and en-SA to the same URL. Is that wrong?

Yes. That set says one URL is both the Arabic and the English version, so there is nothing for Google to swap between. Give the English version its own URL, then list both URLs on both pages with self-references. Until a separate English URL exists, remove the English annotation rather than publish a contradictory one.

Is a missing x-default an error?

No. Google recommends x-default as the fallback for users whose language matches none of your versions, and designed it for language selector pages. Without it, Google picks a version itself. For an Arab brand with Arabic and English, point x-default at the language selector or at whichever version unmatched visitors should see.

Everything else we have run on Technical SEO

Written by whoever ran the work, not a content team

5 articles
All articles
Previous articleNext article
Did you like the article?
Share:
  • RTL in WordPress Themes: How 10 Popular Themes Handle Arabic Layouts

  • Arabic URL Slugs: Encoded Arabic, Transliteration or English? What 24 Arab Websites Use

  • Do Arab Websites Block AI Crawlers? We Checked the robots.txt of 50 Brands

  • Arabic Web Fonts and Page Speed: What 29 Arab Brand Homepages Load