1

Um noindex no PR errado tira o site do Google e nenhum teste quebra: como montar um check de SEO no GitHub

O build passa, os testes passam, o site abre normal.

E mesmo assim o deploy tirou o site do Google, porque o robots.txt do staging foi junto pra produção ou uma variável de ambiente ligou o noindex em todas as páginas.

Ninguém percebe, porque pra quem visita está tudo certo.

O Google só vê na próxima vez que rastreia a página, o tráfego começa a cair dias depois e o Search Console confirma o estrago com mais alguns dias de atraso.

O lugar mais barato pra pegar isso é o pull request.

Seguem três jeitos de fazer, do mais simples ao mais completo.

1. Uma Action que lê o diff

Não depende de preview. Ela olha as linhas que o PR adiciona nos arquivos que controlam a indexação e falha se aparecer um bloqueio novo:

name: SEO no PR
on: pull_request
jobs:
  seo:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Bloqueios novos de indexação
        run: |
          base=origin/${{ github.base_ref }}
          arquivos='robots.txt public/robots.txt app/robots.ts app/layout.tsx next.config.js vercel.json _headers netlify.toml'
          novas=$(git diff "$base"...HEAD -- $arquivos | grep '^+' | grep -v '^+++' || true)
          if echo "$novas" | grep -Eiq 'noindex|index: *false'; then
            echo "::error::noindex novo neste PR"; exit 1
          fi
          if echo "$novas" | grep -Eiq 'disallow: */ *$'; then
            echo "::error::robots.txt passa a bloquear o site inteiro"; exit 1
          fi

O ponto fraco: ela só enxerga texto. Não sabe se o noindex está dentro de um if (VERCEL_ENV !== "production"), que é o certo.

2. Lighthouse CI no preview

Se a Vercel ou a Netlify geram um preview por PR, o Lighthouse CI com a auditoria is-crawlable como error pega a página bloqueada pela meta tag, pelo cabeçalho ou pelo robots.txt.

A pegadinha: a Vercel e a Netlify mandam X-Robots-Tag: noindex em todo preview, de propósito. Sem tratar isso, o check fica vermelho em todo PR e o time desliga em uma semana.

3. Comparar o preview com a produção

O jeito que não gera alarme falso é comparar o PR com o que já está no ar: ignorar o noindex do cabeçalho que todo preview tem e travar só o que mudou de verdade.

O que travar e o que só avisar

Check que fica vermelho por tudo vira ruído. Travar só:

  • robots.txt fechando o site inteiro
  • noindex novo em página que estava indexada

Canonical, título, descrição e robôs de IA bloqueados: avisar, não travar.

A ressalva do repositório privado

Pra o check travar o merge, ele precisa ser obrigatório numa regra de branch (Settings > Rules > Rulesets > Require status checks to pass). Segundo a documentação do GitHub, isso funciona em repositório público em qualquer plano, mas em repositório privado só com GitHub Pro, Team ou Enterprise. No Free com repo privado, o check aparece e avisa, mas não impede o merge.

Um caso nosso

Aconteceu aqui: num PR do nosso próprio site, a gente pôs X-Robots-Tag: noindex só no feed do blog (/blog/rss.xml), pelo arquivo _headers da Cloudflare. Era a coisa certa a fazer, e o nosso check travou o PR mesmo assim, porque viu um noindex novo no _headers e não olhou pra qual caminho ele valia.

A correção foi fazer cada linha nova do _headers levar junto o caminho do bloco em que cai, e ignorar o noindex quando o caminho é feed ou arquivo de dados (.xml, .json, .txt). Arquivo de teste e lockfile também ficam de fora. Sem isso, o check vira inimigo do time.

O passo a passo completo, com a tabela comparando as três opções, está aqui: https://varrida.com/blog/check-de-seo-no-pull-request?utm_source=tabnews&utm_medium=post&utm_campaign=check-seo-pr

Na Varrida, o check "Varrida / SEO técnico" mistura a 1 e a 3: lê o código do PR primeiro e só abre o preview quando o GitHub não entrega o código. Se quiser ver antes como o seu site está hoje, a auditoria grátis lê 9 páginas e não pede cadastro: https://varrida.com/auditoria?utm_source=tabnews&utm_medium=post&utm_campaign=check-seo-pr

Carregando publicação patrocinada...