A multilingual ecommerce site with Arabic, Hebrew, and English versions saw its Arabic pages drop from page 1 to page 3 within two weeks of launching their RTL redesign, not because the content quality declined, but because Google Search Console flagged 847 mobile usability errors and the Arabic hreflang annotations pointed to nonexistent URLs.
According to a 2024 study by Screaming Frog, 62% of multilingual sites audited had critical hreflang implementation errors that directly impacted indexing and ranking for non-English language versions.
RTL (right to left) websites serving Arabic, Hebrew, Persian, and Urdu content face a distinct set of technical SEO challenges that LTR (left to right) sites never encounter: mixed directional content breaking structured data, CSS overrides causing crawl rendering failures, and Google’s mobile-first indexing treating poorly implemented RTL layouts as low quality mobile experiences. This guide walks through how to diagnose these issues using real audit tools, then fix them systematically to recover rankings and indexation for RTL language pages.
Prerequisites
Before starting this tutorial, ensure you have:
- Access to Google Search Console for the RTL site or domain
- Access to the site’s CMS or codebase (WordPress, Shopify, custom build)
- A technical SEO crawler: Screaming Frog SEO Spider (free version handles up to 500 URLs), or a full license
- Browser developer tools installed (Chrome DevTools or Firefox Developer Edition)
- Access to the site’s Google Analytics or equivalent to track traffic drops by language
- An XML sitemap URL for the RTL language pages (if separate from main sitemap)
- Basic understanding of HTML attributes:
lang,dir,hreflang
Step 1: Audit Current Indexation and Crawl Status for RTL Pages
Start by confirming which RTL pages are indexed and whether Google is encountering crawl or rendering issues.
In Google Search Console:
- Navigate to Coverage (or Pages in the updated interface)
- Filter by the RTL language subdirectory or subdomain (e.g.,
site:example.com/ar/for Arabic) - Check for errors flagged under “Excluded,” “Error,” or “Valid with warnings”
- Common RTL-specific errors to look for:
- “Submitted URL not found (404)” — often caused by incorrect hreflang links between LTR and RTL versions
- “Redirect error” — RTL pages redirecting incorrectly to LTR equivalents
- “Soft 404” — RTL pages rendering blank or with broken layout, interpreted as having no content
- “Mobile usability issues” — text overflow, clickable elements too close, viewport not set
Run a Mobile Usability report specifically for RTL URLs. If errors appear only for RTL pages, the issue is directional layout related.
Use Screaming Frog to crawl the RTL section:
# Crawl only the RTL subdirectory
Configure > Spider > Crawl: subdirectory only
Enter: https://example.com/ar/
In Screaming Frog, check:
- Response Codes tab: any 404s or 5xx errors unique to RTL URLs
- Directives tab: confirm
langanddirattributes are set correctly - Page Titles tab: verify titles render properly in Arabic/Hebrew script (not garbled UTF-8)
Export the crawl as CSV. Filter by Response Code and Internal Links to identify orphaned RTL pages (pages with zero internal links pointing to them).
If a large percentage of RTL pages show as “Discovered – currently not indexed” in GSC but have valid content, the issue is likely rendering or crawl budget related.
Step 2: Fix HTML dir and lang Attributes
Google uses the dir attribute to understand text direction and the lang attribute to identify the language. Missing or incorrect attributes cause rendering and indexing failures.
Correct implementation for an Arabic page:
<html lang="ar" dir="rtl">
<head>
<meta charset="UTF-8">
<title>أفضل أدوات SEO للشركات الصغيرة</title>
</head>
<body>
<!-- RTL content here -->
</body>
</html>
For mixed content pages (e.g., Arabic text with English product names or numbers):
<p>استخدم <span lang="en" dir="ltr">Google Analytics</span> لتحليل البيانات</p>
This tells the browser and search engines that the embedded English phrase should render left to right within an overall right to left flow.
Common mistakes:
- Setting
dir="rtl"on<body>but not on<html>— search engines read the root element first - Using
lang="ar"but leavingdirunset — causes text to render LTR with RTL script, breaking readability - Copy-pasting RTL text into LTR templates without adjusting
dir— Google may interpret this as low quality or duplicated content
WordPress fix:
If using a multilingual plugin like WPML or Polylang, verify the language switcher outputs correct lang and dir attributes. In WPML:
// functions.php - force RTL attribute for Arabic
add_filter('language_attributes', 'wpml_add_rtl_support');
function wpml_add_rtl_support($output) {
if (ICL_LANGUAGE_CODE == 'ar') {
$output = 'lang="ar" dir="rtl"';
}
return $output;
}
Check the live HTML source (View Page Source in browser) for every RTL template: homepage, category pages, product pages, blog posts. Confirm <html lang="ar" dir="rtl"> appears consistently.
Step 3: Validate and Fix Hreflang Annotations
Hreflang tells Google which language version of a page to show in which market. For RTL sites, incorrect hreflang annotations are the most common cause of indexation issues.
Correct hreflang setup for a site with English, Arabic, and Hebrew versions:
<link rel="alternate" hreflang="en" href="https://example.com/products/" />
<link rel="alternate" hreflang="ar" href="https://example.com/ar/products/" />
<link rel="alternate" hreflang="he" href="https://example.com/he/products/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/products/" />
Every page must include hreflang links to all language versions of itself, including a self-referencing link.
Common errors specific to RTL sites:
- Hreflang link pointing to a 404 URL (e.g., Arabic hreflang still references old URL structure after redesign)
- Missing return tags — the Arabic page links to the English version via hreflang, but the English page does not link back to Arabic
- Wrong language code — using
lang="arabic"instead oflang="ar"
How to audit:
Use Screaming Frog’s Hreflang tab. Look for:
- “Missing return links” — indicates one-way hreflang annotations
- “Incorrect language/region codes” — flags non-standard codes
- “Inconsistent language/region variations” — one page says
ar-AE, another saysar-SA, but both should use a consistent code or a genericar
Alternatively, use hreflang Tags Testing Tool by Aleyda Solis to bulk test URLs.
Fix in WordPress (WPML example):
WPML auto-generates hreflang if configured correctly. Check WPML > Languages > Language URL format and ensure “Language name added as a parameter” is NOT selected — use directory or subdomain.
Fix in HTML (manual sites):
Add hreflang annotations to the <head> of every page using your templating system. For large sites, generate hreflang dynamically based on available translations.
After fixing, submit the RTL sitemap separately in Google Search Console under Sitemaps to prompt re-crawling.
Step 4: Fix CSS and Layout Rendering Issues Affecting Crawl
Google’s mobile-first indexing renders pages using a headless browser. If your RTL CSS causes layout breaks, overlapping text, or hidden content, Google may treat the page as low quality or not index it at all.
Common RTL CSS issues:
- Text overflowing containers because
text-align: leftis hardcoded in global CSS - Navigation menus rendering off-screen because
float: leftis not mirrored tofloat: right - Fixed-width elements breaking on mobile when RTL script is longer than the LTR equivalent
- Z-index issues causing RTL dropdown menus to render behind other elements
How to test:
Use Chrome DevTools to simulate mobile rendering:
- Open the RTL page in Chrome
- Press
F12to open DevTools - Click the device toggle icon (or
Ctrl+Shift+M) - Select a mobile device (e.g., iPhone 12 Pro)
- Reload the page and inspect for:
- Horizontal scrollbars (indicates overflow)
- Overlapping text or images
- Buttons or links rendering outside the viewport
Fix example — ensuring proper RTL text alignment:
/* Global LTR default */
body {
direction: ltr;
text-align: left;
}
/* RTL override for Arabic pages */
html[lang="ar"] body,
html[dir="rtl"] body {
direction: rtl;
text-align: right;
}
html[lang="ar"] .navigation,
html[dir="rtl"] .navigation {
float: right;
}
For complex layouts, use CSS logical properties (supported in all modern browsers):
/* Instead of margin-left: 20px; */
margin-inline-start: 20px;
/* Instead of padding-right: 10px; */
padding-inline-end: 10px;
These automatically flip based on dir attribute without needing separate RTL overrides.
WordPress RTL themes:
Most modern WordPress themes include an rtl.css file. Ensure it is being loaded for RTL languages. If not:
// functions.php - enqueue RTL stylesheet
function load_rtl_styles() {
if (is_rtl()) {
wp_enqueue_style('rtl-style', get_template_directory_uri() . '/rtl.css');
}
}
add_action('wp_enqueue_scripts', 'load_rtl_styles');
After CSS fixes, use Google’s Mobile-Friendly Test on 5-10 RTL URLs to confirm no layout errors remain.
Step 5: Fix Structured Data and Schema Markup for RTL Content
Structured data helps Google understand page content and display rich results. RTL sites often break schema markup by mixing directionality within JSON-LD or incorrectly encoding Arabic/Hebrew text.
Common schema issues on RTL pages:
nameordescriptionfields containing garbled UTF-8 (e.g.,Ø£ÙØ¶Ù„ أدوinstead of proper Arabic script)- Mixed directional strings breaking JSON syntax (e.g., product name in English embedded in Arabic description without escaping)
- Missing
inLanguageproperty in schema, causing Google to misidentify the content language
Correct schema example for an Arabic blog post:
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "أفضل استراتيجيات SEO للشركات الصغيرة",
"description": "دليل شامل لتحسين محركات البحث باللغة العربية",
"author": {
"@type": "Person",
"name": "محمد أحمد"
},
"inLanguage": "ar",
"datePublished": "2025-03-15"
}
Always set "inLanguage": "ar" (or "he", "fa", "ur") to explicitly declare the content language.
How to test:
Use Google Rich Results Test to validate schema on RTL URLs. Common errors flagged:
- “Invalid value for field ‘name'” — usually caused by encoding issues
- “Missing field ‘inLanguage'” — add it explicitly even if your HTML
langattribute is correct
Fix encoding issues:
Ensure your CMS or templating engine outputs UTF-8 encoded JSON-LD. In WordPress:
// functions.php - ensure UTF-8 encoding for schema output
add_filter('the_content', 'fix_rtl_schema_encoding');
function fix_rtl_schema_encoding($content) {
return mb_convert_encoding($content, 'UTF-8', 'UTF-8');
}
For custom implementations, validate your JSON-LD through a JSON validator before embedding it in the page.
Step 6: Optimize Internal Linking and XML Sitemaps for RTL Pages
RTL pages often suffer from poor internal link structure — either because the site’s navigation is not properly mirrored or because content editors link only to English pages, leaving Arabic/Hebrew pages orphaned.
How to audit:
In Screaming Frog, run a crawl and check the Internal tab filtered by the RTL subdirectory. Export and sort by “Inlinks” (ascending). Pages with 0 or 1 inlinks are at risk of not being crawled or indexed.
Compare internal link counts between English and RTL equivalents:
- Homepage (EN): 150 inlinks
- Homepage (AR): 12 inlinks
This disparity signals a navigation or linking issue.
Fix navigation mirroring:
Ensure primary navigation, footer links, and breadcrumbs link to RTL equivalents when a user is browsing the RTL version. In WordPress:
// Example: force RTL menu to use translated URLs
if (function_exists('icl_object_id')) {
$menu_id = icl_object_id($menu_id, 'nav_menu', true, ICL_LANGUAGE_CODE);
}
Fix XML sitemap:
Create a dedicated XML sitemap for RTL pages:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://example.com/ar/products/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/products/" />
<xhtml:link rel="alternate" hreflang="ar" href="https://example.com/ar/products/" />
<lastmod>2025-03-15</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
Submit this sitemap separately in Google Search Console under Sitemaps.
For sites with frequent content updates, set up a dynamic sitemap generator that automatically includes new RTL URLs.
Step 7: Fix Mobile Usability Issues Specific to RTL Layouts
Google’s mobile-first indexing evaluates the mobile version of your site first. RTL layouts that work perfectly on desktop often break on mobile due to viewport issues, touch target sizing, or text rendering.
Common mobile RTL issues flagged in Google Search Console:
- “Text too small to read” — Arabic/Hebrew fonts rendering smaller than 12px on mobile
- “Clickable elements too close together” — RTL navigation menu items overlapping
- “Content wider than screen” — horizontal scroll caused by RTL elements not respecting viewport width
- “Viewport not set” — missing or incorrect viewport meta tag
Fix viewport meta tag:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
Ensure this is present on every RTL page.
Fix font sizing for RTL scripts:
html[lang="ar"] body,
html[lang="he"] body {
font-size: 16px; /* Minimum readable size for mobile */
line-height: 1.6; /* RTL scripts benefit from increased line height */
}
Test on real devices. Arabic script in particular can appear cramped if line height is too tight.
Fix touch target spacing:
html[dir="rtl"] .navigation a {
padding: 12px 16px; /* Ensure at least 48px touch target */
margin-inline-start: 8px;
}
After fixes, re-test all RTL URLs using Google Mobile-Friendly Test and monitor the Mobile Usability report in GSC for 2-3 weeks.
Troubleshooting Common Issues
Issue: RTL pages indexed but ranking drops after launch
Cause: Google re-crawled the RTL pages, found layout or rendering issues, and downgraded them. Check Coverage report for “Crawled – currently not indexed” status.
Fix: Run Step 4 (CSS rendering) and Step 7 (mobile usability) again. Request re-indexing via URL Inspection Tool in GSC.
Issue: Hreflang errors persist after fixing annotations
Cause: Old cached hreflang annotations still present in Google’s index. This takes time to clear.
Fix: Submit updated XML sitemap, request re-crawling of key pages, wait 2-4 weeks for Google to re-process.
Issue: Arabic/Hebrew text displays as question marks or garbled characters
Cause: Character encoding mismatch — server sending ISO-8859-1 instead of UTF-8, or font not supporting RTL glyphs.
Fix: Ensure server sends Content-Type: text/html; charset=UTF-8 header. In .htaccess:
AddDefaultCharset UTF-8
Use a web font that supports Arabic/Hebrew glyphs (e.g., Noto Sans Arabic, Almarai).
Issue: RTL pages load slowly, causing crawl budget waste
Cause: Heavy custom fonts, unoptimized images, or excessive CSS for RTL overrides.
Fix: Preload RTL fonts in <head>:
<link rel="preload" href="/fonts/NotoSansArabic.woff2" as="font" type="font/woff2" crossorigin>
Use modern image formats (WebP) and lazy loading for below-the-fold content.
Issue: GSC reports “Duplicate content” between LTR and RTL versions
Cause: Same content translated but not sufficiently differentiated, or missing hreflang causing Google to see both as competing pages.
Fix: Ensure hreflang annotations are correct (Step 3). Add unique value to translated pages — do not machine-translate only. If genuinely duplicate, canonicalize RTL to LTR (not recommended unless content is identical).
Recovering RTL site rankings after technical SEO fixes typically takes 4-8 weeks depending on crawl frequency and site size. For large sites (10,000+ pages), expect longer as Google re-crawls and re-evaluates each RTL URL individually.
Frequently Asked Questions
Do I need separate sitemaps for LTR and RTL language versions?
Not required but recommended for large multilingual sites. A dedicated RTL sitemap makes it easier to track indexation issues by language in Google Search Console and ensures RTL pages are crawled at the same frequency as LTR equivalents.
Can I use automatic translation plugins for RTL SEO without hurting rankings?
Automatic translation alone is not enough. Machine translated content often lacks cultural context, uses incorrect terminology, and produces thin content that does not satisfy user intent. If using plugins like WPML or Weglot, always have a native speaker review and edit translations before publishing.
Why does Google show my English page in Arabic search results instead of the Arabic version?
This indicates an hreflang configuration error or missing hreflang annotations entirely. Google cannot determine which version to show, so it defaults to the original indexed URL. Run Step 3 to fix hreflang and ensure bidirectional linking between all language versions.
Do RTL sites need different keyword research compared to LTR sites?
Yes. Arabic search behavior differs significantly from English. Direct translations of English keywords often have low or zero search volume. Use Google Keyword Planner set to Arabic language and target region, or tools like Semrush with Arabic database enabled to find actual search terms used by native speakers.
How long does it take for RTL pages to recover rankings after fixing technical issues?
Typically 4-8 weeks after submitting corrected sitemaps and requesting re-indexing through Google Search Console URL Inspection Tool. Large sites with complex structures may take up to 12 weeks for full recovery as Google re-crawls and re-evaluates each page.
Should I use subdirectories or subdomains for RTL language versions?
Subdirectories are generally preferred for SEO as they consolidate domain authority under one root domain. Use `example.com/ar/` instead of `ar.example.com` unless you have a strong business reason (e.g., separate hosting for regional compliance). Subdirectories also simplify hreflang implementation and internal linking.
Can poor RTL implementation cause a site wide ranking drop?
Yes, if the majority of your indexed pages are RTL and contain critical rendering or mobile usability errors. Google evaluates site quality holistically. A large volume of low quality RTL pages can negatively impact the perceived quality of the entire domain, affecting LTR pages as well.
