Changelog - 09/05/2026
Geo-SEO multi-país da rede 7k (BR / CL / NG / FI)
- Cluster recíproco de hreflang sem
x-default: cada um dos quatro domínios da família 7k declara as outras três variantes como alternates explícitas —7k.bet.br(pt-BR, self) +cl.bet7k.com(es-CL) +ng.7k.bet(en-NG) +fi.7k.bet(fi-FI). Os três overrides novos (overrides/{cl-bet7k-com,fi-7k-bet,ng-7k-bet}/app/config/seo/hreflang.ts) e a atualização do 7k-bet-br removem ox-defaultque apontava pro Brasil — cada brand é geo-exclusiva (KYC, regulação e moeda locais), então não existe "world fallback" legítimo. Resultado: o Google só serve a variante quando o idioma/região do usuário matcha um alternate explícito (ex: russo ou alemão não vê nenhum domínio, em vez de cair no7k.bet.br). Schema.org/Organizationenriquecida com sinais de país:buildOrganizationJsonLd()(app/utils/seo.ts) agora aceitaaddressCountry(ISO-3166 alpha-2) +areaServedName(nome do país em inglês) e emiteaddress.addressCountry+areaServed.@type=Country. O_layout.tsxresolve ambos viagetCountryByAlpha3de@cactus-agents/country-config— mesmo catálogo usado pelo api-client pra derivar geo headers, evita duplicar mapping alpha-3 → alpha-2 + nome do país.- Novo JSON-LD
WebSitecominLanguage: segundo blob de Schema.org reforçando o idioma da página de forma independente do<html lang>. Google parseiainLanguageseparadamente, então emitir os dois dá ao algoritmo dois sinais redundantes de locale. - Header HTTP
Content-Languageinjetado em toda response HTML peloapp/entry.server.tsx(text/html only — JSON/JS unaffected). Sourced do define__BRAND_LANGUAGE__do Vite e mapeado pra forma BCP 47. Adiciona uma terceira camada de sinal de locale (header HTTP + JSON-LD +<html lang>). - Helper compartilhado
app/utils/locale.tsconsolida os mapasBRAND_LANGUAGE → BCP 47(pra<html lang>,Content-Language,inLanguage, hreflang) eBRAND_LANGUAGE → og:locale(pra OpenGraph). Antes os dois mapas ficavam inline emroot.tsxe_layout.tsx— havia risco de drift entre<html lang="pt-BR">eContent-Language: pt. Cobertura: oito códigos ativos (pt-br,pt,en,es,es-mx,es-cl,en-ng,fi-fi) com fallback prapt-BR. useCasinoNomenclatureagora é guiado por i18n, não mais por regex country-aware. O hook colapsa qualquer string vinda do BFF (campocasinoNomenclature) num enum de 2 valores ("casino" | "games") e resolve o substantivo traduzido viat("layout:sidebar.casino")/t("layout:sidebar.nomenclature_games"). Adicionar país novo virou uma linha em cadalayout.jsondo core — zero mudança no front. Dependência deuseBrand().features.country?.coderemovida.- Doc operacional fora-do-código: o sinal mais forte de geo-targeting pra gccTLDs (
.com,.bet) continua sendo o Google Search Console → International Targeting → Country, que é manual. Walkthrough escrito emdocs/superpowers/specs/2026-05-09-google-search-console-geo-targeting.mdpro time de SEO/marketing.