{
  "id": 18958645,
  "title": "I shipped 174 pages across 7 languages. Two were silently broken.",
  "url": "https://urgent.news/2026/11/08/i-shipped-174-pages-across-7-languages-two-were-silently-broken",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-11-08T15:11:02.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/xnowpro/i-shipped-174-pages-across-7-languages-two-were-silently-broken-3noh"
  },
  "original_language": "en",
  "account": "The reporter embarked on an SEO task that soon turned into six hours of debugging. The setup involved a SaaS site with a service catalog, where prices were stored in a database and required server rendering. A crawler hitting an empty div with id=\"app\" saw no content worth indexing. One renderer was built and wired to seven language configurations, with each language having a homepage, a pricing page, and 15 platform pages. The site's sitemap amounted to around 174 URLs.\n\nThe reporter initially felt good about the number of URLs. However, after checking the hreflang cluster, they discovered two major issues. Firstly, the hreflang declarations were not independent but rather a cluster. If one page declared alternatives as zh, en, and x-default while another declared all seven languages plus x-default, the cluster contradicted itself. Google's behavior in such a situation was to ignore the conflicting set. The fix was simple: generate hreflangs from a single array, use it everywhere, and include the current language in its own list.\n\nSecondly, the Arabic language version was missing the dir=\"rtl\" attribute, causing the text to appear left-to-right instead of right-to-left. The reporter had written code for RTL support, but a mistake in the implementation led to the attribute being omitted. The fix involved creating a function to set the language and direction, ensuring that the correct attributes were added to the HTML tag.\n\nThe reporter also addressed CSS issues, realizing that Arabic required specific styling adjustments, such as margin and text alignment. By using logical properties, they were able to achieve the desired results without adding extra overrides. The final check involved verifying that Googlebot correctly interpreted the Arabic language and direction settings, as well as ensuring that real content was present for the crawler.",
  "summary": "Started this as an SEO task. Turned into about six hours of debugging that I want to write down before I forget the details. The setup A SaaS site with a service catalog. Prices come from the database and change, so the pages have to be server-rendered. A crawler hitting an empty <div id=\"app\"> sees nothing worth indexing. Built one renderer, wired it to seven language configs: zh, en, id, pt,…",
  "key_points": [
    "Reporter shipped 174 pages across 7 languages for SEO task",
    "Two pages silently broken due to hreflang cluster issue",
    "Arabic version lacked dir= rtl attribute causing text orientation issue"
  ],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}