- Ya
- 12 Agosti 2026, 14:45 UTC
- Mwandishi
- Kamo
- Ahadi ya
- e99827a
The 2,400 noindexed detail pages were noindexed because their body copy has no translation: competitors, industries, integrations and glossary keep their prose in app/lib/**/*.ts, which the dictionary never saw, so /fr/solutions/real-estate rendered French headings around English paragraphs. scripts/extract-collections.ts pulls the 3,799 translatable strings out of those 120 items into a structure-mirroring tree, skipping anything a translator must not touch — slugs, category enums, matrix statuses, logo paths, relatedTerms cross-references, and vendor/product names. That tree ships as the `collections` namespace in kamo-marketing/en.json. At read time localizeItem merges the translated tree over the English object. Only keys present in the translation are replaced, and an array whose length drifted from the source is dropped wholesale rather than rendering a list with missing entries, so stale translations degrade to English instead of breaking the page. `collections` is stripped from NextIntlClientProvider: it is ~420 KB that only server components read, and next-intl serializes whatever the provider gets into the RSC payload of every page. The per-locale merge in i18n/request.ts is now memoized for the same reason — it was cheap at 150 KB and is not at 514 KB. collectionRobots still reports noindex until the translations land; widening COLLECTION_CONTENT_LOCALES is what lifts it.