Relatórios com sua marca
Um relatório PDF de um site com pontuação geral, tendência de ocorrências, problemas resolvidos e novos desde o relatório anterior, 404 e links quebrados recuperados, mudanças em Search Console e atividade de bots de IA. Gere por comando e, opcionalmente, envie por e-mail em um horário programado. Agências podem usar logo, cor e identificação do cliente.
Baixar o relatório de exemplo (PDF) ou siga o passo a passo de varredura, correção e relatório. O exemplo usa conteúdo de demonstração Merchant e duas varreduras recentes: uma ocorrência resolvida, 19 abertas e nenhum dado de Search Console.
Este documento com novo design resume os resultados registrados das varreduras e do relatório. Seu layout não é o padrão dos PDFs do Pro.
Conteúdo do relatório
- Pontuação geral: média das pontuações mais recentes por página, conforme os critérios publicados, de A ≥ 90 a F, com a mudança desde o relatório anterior. Inclui uma tendência da pontuação geral das varreduras recentes. Cada varredura registra a pontuação do site na execução; o histórico começa na primeira execução após a atualização. Execuções anteriores sem pontuação são ignoradas.
- Ocorrências por varredura: histórico das execuções recentes concluídas. Uma redução deve ser interpretada junto das mudanças de escopo e verificações.
- Resolvidas e novas: quantidade de problemas corrigidos e surgidos desde o relatório anterior. Usa o ciclo de vida de resolução e reabertura quando há um período completo de histórico; caso contrário, compara o snapshot do relatório anterior.
- Recuperações: links quebrados resolvidos, 404 recuperados, cujo próprio caminho voltou a responder 200 —consulte
seo-pro:404-recheck—, 404 redirecionados desde o último relatório e problemas ainda abertos. Uma recuperação na origem é contada separadamente de um redirecionamento. - Search Console: principais consultas e páginas e as maiores mudanças de cliques. A seção é omitida de forma controlada quando a integração não está configurada.
- Bots de IA: requisições atribuídas por user-agent, sem verificação de identidade, totais acumulados e, quando os registros diários cobrem o intervalo, acessos no período e URLs distintos por bot. Sem cobertura, usa a diferença entre totais dos snapshots.
Desde o relatório anterior
A comparação usa o relatório anterior, não uma data arbitrária. Cada geração salva um snapshot leve em seo_report_runs, com pontuação, identidades de ocorrências abertas, linhas de Search Console e contadores de bots. O relatório seguinte compara o estado atual com esse registro.
O snapshot é a alternativa para sinais que não mantêm histórico próprio, como as pontuações por página, armazenadas apenas em sua versão mais recente. Outros sinais têm histórico e recebem prioridade: o ciclo de vida das ocorrências, as métricas diárias de Search Console e os registros diários dos bots. No primeiro relatório após uma atualização, ou sem histórico suficiente, cada seção volta à diferença entre snapshots.
Duas consequências:
- O primeiro relatório é a linha de base. Mostra o estado atual. Contagens de resolvidas, novas, mudanças e «desde o último relatório» começam no segundo.
- Você define a frequência. Relatórios mensais comparam aproximadamente um mês; semanais, uma semana. Use
--no-storepara uma prévia que não deve alterar a referência.
Gerar um relatório
php artisan seo-pro:reportSem opções, grava o PDF em storage/app/seo-reports/. Para escolher outro destino ou enviar por e-mail:
# Write to a specific file or directory
php artisan seo-pro:report --output=/tmp/acme-october.pdf
# E-mail it to one or more recipients (the PDF is attached)
php artisan seo-pro:report --email=client@acme.com --email=pm@agency.com
# One-off preview that does NOT store a snapshot (deltas won't advance)
php artisan seo-pro:report --no-store --output=/tmp/preview.pdf
# Machine-readable summary
php artisan seo-pro:report --jsonOpções
| Opção | Efeito |
|---|---|
--client= | Substitui a identificação do cliente na indicação «preparado para» |
--agency= | Substitui o nome da agência |
--accent= | Substitui a cor de destaque em hexadecimal, como #3D5AFE |
--logo= | Substitui o caminho da imagem do logo |
--email= | Define um destinatário e envia o relatório; pode ser repetida |
--send | Envia aos destinatários configurados |
--output= | Grava o PDF no arquivo ou diretório indicado |
--no-store | Não salva snapshot nem avança a referência da comparação |
--json | Emite um resumo legível por máquina |
Agendar o e-mail
O relatório não agenda seu próprio envio. Defina a frequência em routes/console.php ou app/Console/Kernel.php da aplicação:
use Illuminate\Support\Facades\Schedule;
Schedule::command('seo-pro:report --send')->monthly();Configure os destinatários padrão uma vez, na configuração ou no .env:
SEO_PRO_REPORT_RECIPIENTS="client@acme.com,pm@agency.com"--send usa esses destinatários. Opções --email explícitas os substituem.
Identidade visual
Os dados de marca não são segredos e ficam na configuração. Cada relatório os reutiliza; as opções do comando podem substituir os valores, inclusive quando uma instalação gera relatórios identificados para clientes diferentes.
SEO_PRO_REPORT_AGENCY="Blue Whale Studio"
SEO_PRO_REPORT_LOGO="/var/www/brand/logo.png"
SEO_PRO_REPORT_ACCENT="#3D5AFE"
SEO_PRO_REPORT_CLIENT="Acme Outdoor Co."
SEO_PRO_REPORT_CONTACT="hello@bluewhale.studio · bluewhale.studio"
SEO_PRO_REPORT_FOOTER="Confidential — prepared for Acme Outdoor Co."Observações:
- Logo: caminho absoluto de um arquivo
PNG,JPG,GIF,WEBPouSVG. A aplicação lê o arquivo e o incorpora como URI de dados no PDF, sem exigir que o renderizador busque essa imagem pela rede. PNG ou JPG são as opções mais seguras. - Cor de destaque: validada como hexadecimal. Um valor inválido usa o padrão. A entrada só é usada como cor, nunca como CSS bruto.
- Nome da agência: usa
config('app.name')por padrão.
O bloco completo reports em config/seo-pro.php inclui paper, padrão a4, include_gsc e os limites de execuções de tendência, linhas GSC e bots.
Um site por instalação
Pro verifica a aplicação em que está instalado, e o relatório descreve essa instalação. Uma agência com vários sites gera um relatório por instalação e identifica cada cliente por --client ou pela marca. Não há um modelo multitenant de sites.
Como o PDF é gerado
O renderizador padrão é dompdf, em PHP, sem Node ou Chromium. Um relatório pode ser gerado no worker ou cron sem esses binários, mantendo Pro independente de painel. Buscas remotas são desativadas e a imagem do logo é incorporada; campos renderizados não iniciam downloads de recursos.
Relatórios em outras escritas com Browsershot
Desde Core 3.20 e Pro 2.40, os renderizadores Chrome desativam JavaScript e bloqueiam recursos por HTTP(S), FTP e WebSocket. Templates publicados devem usar HTML/CSS estático e recursos incorporados. Essas restrições tratam dos recursos da página; Chrome ainda precisa de host e sandbox configurados corretamente. O renderizador PDF registra uma indicação de instalação de fontes quando Fontconfig identifica uma escrita sem cobertura, inclusive minoritária em texto misto. Uma fonte ausente não impede a criação do PDF: confira o resultado antes de enviá-lo.
dompdf usa a fonte incorporada DejaVu Sans, com cobertura de latim, cirílico e grego. Outras escritas, como japonês, tailandês e árabe, podem aparecer como quadrados de glifos ausentes. Desde Pro 2.34, você pode usar Chrome sem interface gráfica por spatie/browsershot, a mesma dependência das imagens OG do núcleo:
// config/seo-pro.php → 'reports'
'renderer' => 'browsershot', // default 'dompdf'
'browsershot' => [
'chrome_path' => null, // null = reuse seo.og_image.chrome_path
'node_binary' => null, // … seo.og_image.node_binary
'npm_module_path' => null, // … seo.og_image.npm_module_path
'no_sandbox' => null, // … seo.og_image.no_sandbox
'timeout' => 90,
],
'locale' => null, // report language; null captures the app locale
'format_locale' => null, // optional regional date/number formatChrome usa as fontes instaladas no servidor. O template segue a lista por escrita do núcleo: Noto Sans, a família Noto Sans CJK correspondente ao idioma à frente, tailandês, árabe, hebraico, devanágari, emoji colorido e DejaVu Sans como referência latina. Instale as famílias necessárias; em Debian/Ubuntu, apt install fonts-noto-cjk fonts-noto-core fonts-noto-color-emoji, como nas imagens OG. seo:og-images avisa quando falta uma família para a escrita de uma página; o diagnóstico também ajuda a configurar relatórios. Os dois motores usam o mesmo template Blade, dados e snapshot; muda o renderizador. ReportGenerator::renderer() informa qual está associado.
Datas e números no formato do leitor
O relatório captura seo-pro.reports.locale ao ser gerado; nulo usa o idioma da aplicação. O idioma de tradução resolvido controla rótulos de PDF e e-mail, assunto padrão, fontes e HTML lang. Locales regionais sem arquivo próprio usam o idioma base e depois inglês. Chinês simplificado zh_CN e tradicional zh_TW permanecem distintos.
Com ext-intl, datas e números seguem o locale solicitado por ICU. Use seo-pro.reports.format_locale para escolher outro formato regional explicitamente: locale=it com format_locale=en_US gera rótulos italianos e formatação dos EUA. Sem ext-intl, preserva o formato alternativo de datas em inglês e números agrupados por vírgulas.
E-mails em fila mantêm o idioma, a formatação e o assunto capturados, mesmo que a configuração do worker mude. Escolha o idioma antes de gerar o PDF: alterar depois o locale do mailable não traduz o anexo. Payloads antigos, anteriores a Pro 2.39, usam a configuração do worker porque não capturaram esses ajustes. Assuntos personalizados, marca e mensagens de ocorrências armazenadas continuam sendo dados de origem.
O idioma da CLI é independente. php artisan seo-pro:report --display-locale=it traduz o resumo do comando; a configuração do relatório escolhe o idioma do PDF e e-mail do cliente. A CLI usa inglês por padrão, configurável por SEO_PRO_CLI_LOCALE. Chaves JSON e códigos permanecem estáveis; rótulos para pessoas podem mudar. Publique seo-pro-lang para personalizar mensagens em lang/vendor/seo-pro/{locale}/seo-pro.php.
Em código, resolva ReportGenerator pelo contêiner:
use Rankbeam\Seo\Pro\Reports\Branding;
use Rankbeam\Seo\Pro\Reports\ReportGenerator;
$report = app(ReportGenerator::class)->generate(
Branding::fromConfig()->withOverrides(['prepared_for' => 'Acme Outdoor Co.']),
);
$report->pdf; // raw PDF bytes
$report->data; // the assembled ReportData
$report->run; // the persisted SEOReportRun snapshot