Pular para o conteúdo principal

5 publicações com a etiqueta "seo"

Ver todas as etiquetas

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 o x-default que 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 no 7k.bet.br).
  • Schema.org/Organization enriquecida com sinais de país: buildOrganizationJsonLd() (app/utils/seo.ts) agora aceita addressCountry (ISO-3166 alpha-2) + areaServedName (nome do país em inglês) e emite address.addressCountry + areaServed.@type=Country. O _layout.tsx resolve ambos via getCountryByAlpha3 de @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 WebSite com inLanguage: segundo blob de Schema.org reforçando o idioma da página de forma independente do <html lang>. Google parseia inLanguage separadamente, então emitir os dois dá ao algoritmo dois sinais redundantes de locale.
  • Header HTTP Content-Language injetado em toda response HTML pelo app/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.ts consolida os mapas BRAND_LANGUAGE → BCP 47 (pra <html lang>, Content-Language, inLanguage, hreflang) e BRAND_LANGUAGE → og:locale (pra OpenGraph). Antes os dois mapas ficavam inline em root.tsx e _layout.tsx — havia risco de drift entre <html lang="pt-BR"> e Content-Language: pt. Cobertura: oito códigos ativos (pt-br, pt, en, es, es-mx, es-cl, en-ng, fi-fi) com fallback pra pt-BR.
  • useCasinoNomenclature agora é guiado por i18n, não mais por regex country-aware. O hook colapsa qualquer string vinda do BFF (campo casinoNomenclature) num enum de 2 valores ("casino" | "games") e resolve o substantivo traduzido via t("layout:sidebar.casino") / t("layout:sidebar.nomenclature_games"). Adicionar país novo virou uma linha em cada layout.json do core — zero mudança no front. Dependência de useBrand().features.country?.code removida.
  • 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 em docs/superpowers/specs/2026-05-09-google-search-console-geo-targeting.md pro time de SEO/marketing.

Changelog - 05/05/2026

Analytics — Mixpanel Deposit + AppsFlyer S2S

  • Novo evento Mixpanel Deposit Requested (useAnalytics.trackDepositRequested) disparado quando /wallet/add-credit retorna 200 OK. Espelha o legado DefaultLayout.vue das brands 7k/cassino/vera (props Amount em unidades inteiras + DepositMethod). Continua complementar ao evento de funil já existente (pix_generated no GTM e PixGenerated no Facebook).
  • Bugfix crítico nos eventos S2S do AppsFlyer (sendRegister, sendFTD, sendRebill). Os três estavam dentro do guard if (!shouldLoadTrackers) return do useAnalytics, mas o gate é o inverso do gate do AppsFlyer (shouldLoadTrackers = !isAppMode && !isBot, useAppsFlyer.ready = enabled && isAppMode) — resultado: nenhuma das chamadas server-to-server disparava nem na web (gate externo bloqueia) nem dentro do APK (early return do gate externo cortava o caminho). Agora as três chamadas são disparadas antes do guard e o S2S funciona em produção. Coberto por useAppsFlyer.test.ts (202 linhas) e useAppMode.test.ts (72 linhas).
  • useAppMode agora reconhece ?is_twa=true além de ?app=true. Os APKs em produção da família 7k/cassino/vera (publicados antes do rename do query param) continuam injetando o legado em cada landing — sem isso isAppMode ficava false pra users do app e desativava todo o pipeline de tracking S2S silenciosamente.
  • Valor do deposit GTM corrigido pra unidades inteiras (amountCents / 100) ao invés de cents puros — paridade com o legado e com a expectativa dos dashboards de BI.

Changelog - 01/05/2026

FTD Onboarding — três fluxos novos consolidados (stage-ftd)

Maior entregável do dia. A branch stage-ftd aterrissou três fluxos completos de retenção/conversão D0, todos brand-configuráveis e cobertos por testes:

  • FTD Offer ("Oferta Relâmpago") — modal + floating widget + story thumb com Quick Deposit embutido. Componentes em app/components/ftd-offer/ (Provider, Modal, FloatingWidget, StoryThumb), storage isolado por marca em ftd-offer-storage.ts e analytics em ftd-offer-analytics.ts.
  • FTD Cashback — fluxo D0 com modal de oferta inicial (FtdCashbackFirstModal), modal de prêmio (FtdCashbackPrizeModal), Provider, dev panel, scaffolding de tiers (ftd-cashback-tiers.ts) e persistência local (ftd-cashback-storage.ts). Testes cobrem storage e cálculo de tiers.
  • FTD Check-in — daily check-in com mock fixture, logs diagnósticos, special offers, label "done today" e kill switch via feature flag remota da brand 7k (feat/ftd-checkin-7k-feature-flags). Componentes Checkin, CheckinTrigger, CheckinStoreOffers.
  • Loop de reabertura corrigidouseFtdCashbackFlow ganha guard pra não reabrir o first-modal logo depois do close (PR #485, fix/ftd-cashback-first-modal-loop).

Changelog - 25/04/2026

SEO e FAQ

  • Port do SEO legado (PR #352): infraestrutura completa de SEO com verificação, JSON-LD e helpers no base, descrições ricas por jogo (games-seo.server.ts) com templating de {brand_name}, conteúdo SEO + JSON-LD por liga em sports-seo.config.ts, e correções de gênero feminino nos artigos (A/Da/Na/Pela/À) para brands com nomes femininos como "vera". Bump de @cactus-agents/i18n para 0.69.0 para consumir as chaves do core ao invés de tabelas de locale inline.
  • Sistema estruturado de FAQ (mesmo PR #352): rotas, componentes e helpers para FAQs, com bloco GameFaqPreview na página de detalhe do jogo e redirect do FAQ legado. FAQs populadas para 7k-bet-br, cassino-bet-br, vera-bet-br e betpontobet-bet-br (≈725-790 entradas cada em faq.server.ts).

Changelog - 13/03/2026

Validações (front-web-base + front-cactus-core)

  • Adicionado motor de validações no core SDK: stores Zustand, hooks e serviços para gerenciar fluxo de validação de jogadores por contexto (depósito, saque, casino, esportes)
  • Implementado ValidationBlockerOverlay: tela bloqueante com anti-tamper (MutationObserver + interval), bloqueio de ESC e carrossel de steps
  • Criado ValidationStepsModal: modal fechável para validações contextuais, com visual idêntico ao overlay porém com botão de fechar
  • Adicionados 10 componentes de step: Email, Telefone, Endereço, Documentos, Senha, Limites, KYC, Termos, GPS e Conta Bancária
  • Primitivos de UI criados: OTPInput, InputField, SelectField, PrimaryButton, ResendButton, SuccessState, StepCarousel
  • Todos os modais tematizados com tokens auth.* do theme.config.ts
  • Gates de validação conectados nos módulos existentes: GameIframe (antes de abrir jogo), DepositModal, WithdrawModal, Sports layout, e seções da conta do usuário (endereço, documentos, limites, autoexclusão, timeout)
  • 14 rotas de API criadas para todos os endpoints de validação
  • Utilitário buildValidationSnapshot adicionado
  • AuthInitializer conectado com sincronização de runtime
  • Pacote validations publicado no core com motor de regras, tipos TypeScript e testes unitários