# HTTP 503: a maneira correta para SEO

> HTTP 503: código de status correto para manutenção e preservar SEO. Evite penalizações mantendo rastreadores informados durante downtime. Proteja rankings!

URL: https://dpw.dev/seo/http-503-a-maneira-correta-para-seo/  
Publicado em: 2013-03-25  
Categoria: seo  
Tags: planejamento  
Autor: Tárcio Zemel

Você dá a devida importância aos **códigos de status** que são enviados nos **cabeçalhos HTTP** das páginas de seu site? Saiba que enviar um **cabeçalho de resposta HTTP** com um código errado pode ser fatal... Principalmente quando alguma **manutenção** está sendo feita no site ou sistema. Neste artigo, breves considerações a este respeito e quais medidas tomar em relação ao _status code_ 503 quando seu site entrar em manutenção.

> Artigo baseado em [HTTP 503: Handling site maintenance correctly for SEO](http://yoast.com/http-503-site-maintenance-seo/).

## Códigos de status HTTP e mecanismos de busca

Um mecanismo de busca constantemente verifica se o conteúdo que ele está indexando ainda existe e/ou não mudou. Geralmente, mecanismos de busca verificam 2 coisas:

- Se o conteúdo está sendo "encabeçado" com o código HTTP 200;
- Se o conteúdo ainda é o mesmo.

Um **código 200 de HTTP** significa: "Tudo está bem, aqui está o conteúdo que você pediu". É o único status que indica que tudo está bem com o conteúdo. Se o conteúdo foi movido, você pode redirecioná-lo - permanentemente, com um HTTP 301 ou; temporariamente, com um HTTP 302 ou 307.

Se o servidor retorna qualquer outro código de status HTTP, significa que o mecanismo de busca já não pode encontrar o conteúdo. Se um servidor retorna um HTTP 200, mas a página é, de fato, um erro e diz algo como "Arquivo não encontrado" ou tem muito pouco conteúdo, o Google vai classificá-la como um "[soft 404](http://support.google.com/webmasters/bin/answer.py?hl=en&answer=181708)" no Google Search Console.

## Como mecanismos de busca lidam com o tempo de inatividade do servidor (downtime)

Se, durante um rastreamento, um motor de busca encontra algum conteúdo que não existe mais, por exemplo, ele retorna um _status code_ **HTTP 404** que, geralmente, remove o conteúdo dos resultados de pesquisa até que o _crawler_ possa voltar e verificar se ele está lá novamente. Se isso acontece, geralmente vai demorar um pouco para que o conteúdo volte a aparecer nos índices de busca novamente.

O que você deve fazer é garantir que um código de status **HTTP 503** será retornado! Esta é a [definição do código de status 503 da RFC](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.4) (que define esses códigos de estado):

> O servidor atualmente é incapaz de lidar com o pedido devido a uma sobrecarga temporária ou manutenção do servidor. A implicação é que esta é uma condição temporária que será aliviado após algum atraso. Se conhecido, o tempo de atraso PODE ser indicado em um cabeçalho Retry-After. Se nenhum Retry-After é fornecido, o cliente DEVE lidar com a resposta como seria para uma resposta 500.

Então, **você tem que enviar um código de status 503 em combinação com um cabeçalho Retry-After**. Basicamente, você está dizendo: "Espere! Estamos fazendo alguma manutenção, por favor, volte em X minutos". Isso soa muito melhor do que um erro que diz: "Not Found". Um código de status 404 literalmente significa que o servidor não pode encontrar qualquer recurso para retornar à URL acessada.

## Como enviar um cabeçalho HTTP 503?

A maneira como se envia um código HTTP 503 como resposta a uma requisição depende da linguagem server-side que você está trabalhando. Por exemplo, em PHP, envia-se esse HTTP 503 assim:

```
$protocol = $_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1' ? 'HTTP/1.1' : 'HTTP/1.0';
header($protocol . ' 503 Service Unavailable', TRUE, 503);
header('Retry-After: 3600');

```

O tempo de atraso do exemplo, 3600, é dado em segundos, de modo que 3600 segundos corresponde a 60 minutos (ou 1 hora). Você também pode especificar o tempo exato em que o visitante deve voltar enviando uma data em [GMT](http://pt.wikipedia.org/wiki/Greenwich_Mean_Time) ao invés do número em segundos. Algo como:

```typescript
header('Retry-After: Mon, 25 Mar 2013 12:00:00 GMT');

```

Quando preferir usar GMT, faça isso com muita cuidado e consciência! Especificar uma data errada pode causar resultados inesperadamente desastrosos!

## "Meu site nunca está em manutenção, eu uso WordPress!"

Bobagem. Toda vez que você atualiza o _core_ do WordPress ou quando você está atualizando plugins, o WP fornece uma página de manutenção. Essa página, por padrão, envia um cabeçalho HTTP 503 adequado.

Você pode substituir essa página de erro padrão com um arquivo `maintenance.php` na sua pasta `wp-content`, mas, se fizer isso, você tem que ter **certeza** de que o arquivo envia os cabeçalhos HTTP 503 apropriados! Na dúvida, você pode dar uma olhada no código da função [wp\_maintenance()](http://core.trac.wordpress.org/browser/tags/3.5.1/wp-includes/load.php#L145).

Se seu banco de dados caiu, o WordPress envia um erro interno do servidor usando a função [dead\_db()](http://core.trac.wordpress.org/browser/tags/3.5.1/wp-includes/functions.php#L2725). Se você está fazendo uma manutenção planejada no banco de dados, é preciso criar uma página personalizada com uma mensagem de erro - usando o arquivo `db-error.php` em

---

Fonte: [dpw - desenvolvimento para web](https://dpw.dev/) (pt-BR).
Guia para agentes: https://dpw.dev/llms.txt
Índice completo: https://dpw.dev/sitemap-index.xml
Feed: https://dpw.dev/rss.xml
