# REGRAS CONSOLIDADAS PARA GOOGLE ADS (V12.4 — HARD MATCH + DKI SAFE MODE) OBJETIVO: Engine determinístico com canonização automática de keywords, espelhamento obrigatório de keywords em headlines (HARD MATCH 7/7) + 01 título com DKI em modo seguro (SEM substituir espelhos), e regeneração obrigatória de descrições (SEM substring). Eliminar: - falhas de Keyword Match por ausência de headline espelho exato - truncamento por substring (descrições e callouts) - inconsistência entre ENGINE e AUDITORIA - riscos editoriais/limite de caracteres introduzidos por DKI Nenhuma regra anterior foi removida — apenas reforçada. Capitalização inicial permitida. Compatível com GAS v6 — ENGINE AUDITOR HARD MATCH. --- # 0. FLUXO GLOBAL (DETERMINISTIC EXECUTION) INÍCIO PARA cada GRUPO_DE_ANUNCIO (total = 3): PASSO 1 → Gerar Keywords PASSO 1.1 → SANITIZAR E CANONIZAR KEYWORDS PASSO 2 → Normalizar Keywords PASSO 3 → Classificar Keywords por PRIORIDADE PASSO 4 → Selecionar Literais (ALGORITMO FIXO) PASSO 4.1 → Gerar HEADLINES ESPELHO (1 por keyword) PASSO 4.2 → Gerar 01 HEADLINE DKI (SAFE MODE) PASSO 5 → Montar LISTA FINAL DE TÍTULOS (15) com MIRROR ENFORCEMENT + DKI SAFE PASSO 6 → Gerar Descrições (REGENERAÇÃO OBRIGATÓRIA / SEM CORTE) PASSO 7 → Validar Limites PASSO 8 → Inserir Localização (fora dos espelhos) FIM Depois: PASSO 9 → Negativas PASSO 10 → Extensões PASSO 11 → HARD LOCK VALIDATION RETORNAR apenas JSON estruturado. --- # 1. PALAVRAS-CHAVE (ENGINE STEP) GERAR exatamente 7 keywords por grupo. REGRAS: - usar [Exata] e "Frase" - máximo 25 caracteres - keywords devem ser juridicamente tituláveis. --- ## SANITIZAÇÃO E CANONIZAÇÃO (OBRIGATÓRIA) ANTES de aceitar qualquer keyword: FUNÇÃO canonizar(keyword): remover duplicações de delimitadores: [[texto]] → texto converter para forma jurídica clara e titulável. Exemplos obrigatórios: casamento fim → Fim do Casamento fim do casamento → Fim do Casamento fim pensão → Fim da Pensão fim da pensão → Fim da Pensão custo inventário → Custo Inventário SE keyword for vaga, truncada ou não titulável: DESCARTAR e gerar nova. --- ## ENGINE NORMALIZE FUNÇÃO normalizar(texto): remover "[" "]" e '"' remover espaços duplicados aplicar Capitalização Inicial manter acentuação manter ordem NÃO alterar semântica RETORNAR texto_normalizado --- # 2. CLASSIFICAÇÃO DETERMINÍSTICA DE KEYWORDS PRIORIDADE 1 — COMERCIAL DIRETA - valor - custo - preço - regularização - revisão - cálculo - quanto custa - honorários PRIORIDADE 2 — CONTRATAÇÃO - advogado - ação - processo - consulta PRIORIDADE 3 — INFORMATIVA demais termos. --- # 3. SELEÇÃO LITERAL DETERMINÍSTICA FUNÇÃO selecionar_keywords_literais(lista_keywords): ordenar por: prioridade ASC tamanho ASC ordem original selecionar até 5. ❗ Seleção automática — IA não escolhe manualmente. --- # 4. KEYWORD MIRROR HEADLINES — HARD MATCH (ENFORCEMENT) OBJETIVO: Garantir que TODAS as 7 keywords do grupo tenham ao menos 1 headline correspondente EXATO após normalização. Se a keyword existir, o headline espelho correspondente DEVE existir no output final. REGRAS: 1) Para cada keyword do grupo (7): headline_espelho = normalizar(canonizar(keyword)) 2) O headline_espelho deve ser EXATO (após normalização). PROIBIDO: - adicionar palavras (ex: "SP", "Rápido", "Seguro") - remover palavras - trocar ordem - criar sinônimos - plural/singular diferente 3) PROIBIÇÃO ABSOLUTA — "SP" NO ESPELHO Se a keyword NÃO contém "SP" ou "São Paulo", o headline_espelho NÃO pode conter "SP" ou "São Paulo". 4) MIRROR ENFORCEMENT (REGRA DE MONTAGEM): A lista final de 15 títulos DO GRUPO deve conter, como itens separados, TODOS os 7 headlines_espelho. Nenhum espelho pode ser omitido, substituído ou reescrito. --- # 4.2 HEADLINE DKI — SAFE MODE (NOVO) OBJETIVO: Adicionar 01 headline com Dynamic Keyword Insertion para aumentar relevância/CTR em cauda longa, SEM derrubar o HARD MATCH (espelhos continuam obrigatórios). FORMATO DKI (OBRIGATÓRIO): {Keyword:PADRAO_DO_GRUPO} REGRAS SAFE: 1) O headline DKI NUNCA substitui nenhum headline_espelho. Os 7 espelhos continuam obrigatórios dentro dos 15 títulos. 2) O headline DKI NÃO PODE entrar no Bucket de LITERAIS. Ele entra apenas como título "livre" dentro do Bucket CTA/Local. 3) PADRAO_DO_GRUPO deve ser curto, titulável e ≤ 30 caracteres. Exemplos recomendados (escolher 1): - Advogado de Família - Divórcio em SP - Guarda e Pensão - Inventário em SP 4) PROIBIDO no DKI: - termos proibidos ("Grátis", "Gratuito" e variações) - palavras cortadas - caixa alta total - pontuação excessiva 5) Se houver risco de estourar 30 caracteres (por inserção dinâmica), o PADRAO_DO_GRUPO deve ser ainda mais curto (≤ 20 caracteres). --- # 5. TÍTULOS — MONTAGEM DETERMINÍSTICA (15 POR GRUPO) Distribuição original mantida: 05 / 05 / 05 (LITERAL / CTA-LOCAL / PROVA). REGRA DETERMINÍSTICA DE POSIÇÃO: - Bucket 1 (05 LITERAIS): usar os 5 primeiros headlines_espelho (pela ordem de prioridade). - Bucket 2 (05 CTA/LOCAL): 3 CTAs/Local reais + 1 headline_espelho (o 6º) + 1 headline DKI (SAFE MODE). - Bucket 3 (05 PROVA): 4 provas/diferenciais reais + 1 headline_espelho (o 7º). HARD LOCK: - os 7 headlines_espelho entram exatamente como gerados (sem SP extra). - CTAs/Provas podem conter SP/São Paulo quando possível. - o DKI entra como adicional controlado, sem substituir espelhos. LIMITES: - cada título ≤ 30 caracteres --- # 6. DESCRIÇÕES — DETERMINISTIC TEXT ENGINE (NO-TRUNC OUTPUT) RANGE: 80 ≤ caracteres ≤ 92 IDEAL: 85–90 ORDEM DE EXECUÇÃO OBRIGATÓRIA: 1) GERAR descrição completa 2) VALIDAR tamanho e integridade 3) SE inválida → REGERAR DO ZERO 4) PROIBIDO ajustar por corte REGRA ABSOLUTA — ANTI SUBSTRING: NUNCA usar: - texto[:limite] - slice - substring - corte parcial VALIDAÇÃO DE INTEGRIDADE (OBRIGATÓRIA): Uma descrição SÓ É VÁLIDA se: - 80 ≤ caracteres ≤ 92 - termina com "." ou "!" - NÃO termina com espaço - NÃO termina com palavra incompleta SE QUALQUER ITEM FALHAR: REGERAR do zero (reescrita completa). AJUSTE DETERMINÍSTICO: - Se > 92: reescrever reduzindo conectivos e adjetivos (sem cortar string). - Se < 80: reescrever adicionando UVP ou CTA (sem inflar demais). CONTEÚDO: - incluir UVP + CTA - incluir SP/São Paulo quando possível (sem quebrar o range) --- # 7. EXTENSÕES (ATIVOS) — HARD LOCK SITELINKS: - 4 obrigatórios - título ≤25 caracteres - 2 descrições ≤35 caracteres CALLOUTS: - 7 obrigatórios - ≤25 caracteres - incluir 01 diferencial competitivo ANTI-TRUNCAMENTO — CALLOUTS (OBRIGATÓRIO): - Proibido cortar string para caber em 25 caracteres. - Se exceder 25, REESCREVER o callout completo (sem substring). - Proibido terminar com palavra incompleta ou espaço final. --- # 8. POLÍTICAS EDITORIAIS PROIBIDO: - "Grátis" - "Gratuito" - caixa alta total (exceto SP, OAB) - pontuação excessiva PERMITIDO: - Capitalização inicial nos espelhos e literais. --- # 9. HARD LOCK VALIDATION (FINAL) VALIDAR: - existem 3 grupos? - existem 7 keywords por grupo? - keywords foram canonizadas? - existem 7 headlines_espelho (1 por keyword)? - CADA keyword possui 1 headline_espelho EXATO após normalização? - existem 15 títulos por grupo? - Bucket 1 contém 5 espelhos? - Bucket 2 contém 1 espelho (6º) + 3 CTAs reais + 1 DKI? - Bucket 3 contém 1 espelho (7º) + 4 provas reais? - o DKI está no formato {Keyword:...} e ≤ 30? - o DKI NÃO contém termos proibidos? - nenhum título > 30? - descrições 80–92? - descrições terminam com "." ou "!"? - nenhuma descrição termina com palavra incompleta ou espaço? - nenhuma substring detectada em descrições? - callouts completos (sem palavra incompleta) e ≤25? - existem 7 callouts? SE falhar: REEXECUTAR apenas bloco inválido --- RETORNO FINAL: APENAS JSON estruturado. SEM explicações. SEM texto adicional.