Ir para o conteúdo

Prioridade do resolvedor

Cada valor SEO efetivo — título, descrição, canonical, robots e imagens — vem da combinação de seis camadas pelo SEOResolver. As superiores têm prioridade. null nunca substitui um valor de uma camada inferior.

As seis camadas

Da menor para a maior prioridade:

CamadaFonteUso comum
1Configuração do siteconfig/seo.php: site_name, title_suffix, default_og_image, default_robots, …Padrões da marca
2Padrões globais no bancoLinhas de seo_defaults sem tipo de modelAlterar padrões do site sem deploy
3Padrões por tipo de modelLinhas de seo_defaults vinculadas a uma classeImagem OG comum a todos os produtos
4Padrões por rotaLinhas de seo_defaults vinculadas ao nome da rotaPáginas estáticas como home ou contact, sem model
5Valores calculadosAtributos do próprio modelTítulo de title, descrição de excerpt ou body
6Valores explícitosLinha seo_meta do model, via saveSEO()Valores preenchidos pelo editor
php
use Rankbeam\Seo\Facades\SEO;

$seo = SEO::resolve($post);          // model page: layers 1-3 + 5-6
$seo = SEO::forRoute('contact');     // route page: layers 1-2 + 4

O resultado é um objeto de valor imutável SEOData, usado pelo Blade, pela saída em array e pelo Inertia.

Fallbacks calculados, camada 5

Sem valor explícito, o resolvedor deriva os dados do model:

  • Título: atributo title ou name.
  • Descrição: primeiro atributo com texto útil em seo.computed.description_fields. A ordem padrão é excerpt, summary, description, intro, lead, teaser, content, body, text, article. O HTML é removido, entidades são decodificadas e o texto é cortado em um limite de palavra segundo seo.computed.description_max_length, por padrão 160, sem reticências.
  • Robots: hook getSEORobots() ou atributo is_indexable, conforme a seção seguinte.
  • Valores da URL: canonical e og:url a partir de getUrlForSEO().

Controlar robots e indexabilidade

O núcleo oferece noindex por model. HasSEO não declara um método robots porque ele é opcional, mas o resolvedor reconhece estas fontes, nesta ordem:

PrioridadeFonteExemplo
1seo_meta.robots explícito$page->saveSEO(['robots' => 'noindex,follow'])
2Hook getSEORobots(): ?string do modelRetornar 'noindex, nofollow' ou null para seguir à próxima fonte
3Atributo is_indexable, coluna ou accessorFalso ⇒ noindex, nofollow; verdadeiro ⇒ index, follow
php
class Page extends Model
{
    use HasSEO;

    // Option A: let the resolver derive robots from a boolean flag.
    //   Schema::table('pages', fn ($t) => $t->boolean('is_indexable')->default(true));

    // Option B: compute it from your own state.
    public function getSEORobots(): ?string
    {
        return $this->status === 'draft' ? 'noindex, nofollow' : null;
    }
}

// Option C: set it explicitly per page (wins over A and B).
$page->saveSEO(['robots' => 'noindex, follow']);

O que é renderizado

A política de emissão filtra a diretiva antes de chegar ao <head>. A tag <meta name="robots"> só é gerada se a diretiva diferir de default_robots, cujo valor inicial é index,follow:

  • Uma página indexável com index, follow não gera tag robots com essa configuração inicial.
  • Uma página não indexável gera <meta name="robots" content="noindex, nofollow">.
  • Diretivas diferentes, como noindex, max-snippet:-1 ou unavailable_after, são emitidas literalmente, preservando espaços.

Defina seo.robots.emit_default = true para sempre emitir a tag. Veja a política de robots (EN).

Políticas após a resolução

Aplicam-se independentemente da camada que forneceu o valor:

  • Sufixo do título: title_suffix é acrescentado, exceto quando o título já termina com ele. Se um template de rota contém a marca, termine-o com o sufixo para evitar repetições como “Brand — X | Brand”.
  • Parâmetros do canonical: são retirados de URLs derivadas do model ou da requisição, exceto os permitidos em canonical.query_whitelist (EN), como page. Canonicals explícitos são preservados literalmente.
  • Imagens sociais absolutas: og:image e twitter:image são emitidas como URLs absolutas, mesmo quando o valor salvo é um caminho relativo.

Identificar a camada escolhida

O pacote Filament mostra a origem por campo: manual, conteúdo, tipo de model, padrão global, configuração ou URL. SEOWarningEvaluator também expõe a distinção entre valores manuais e fallbacks para indicadores administrativos próprios.

rankbeam/laravel-seo é distribuído sob a licença MIT.