Sirva um único documento HTML com Content-Type: text/html; charset=utf-8, seu título e sua descrição no cabeçalho do documento e conteúdo legível no corpo. Este guia para Mac cria uma página sintética e verifica se uma única resposta contém os três elementos.
A tarefa é preparar um documento público legível pelo navegador, usando uma prévia local antes de transferir a mesma estrutura para um sistema de publicação. O exemplo contém apenas texto inventado sobre formas de papel e não requer recursos externos.
O que deve constar em uma única resposta HTTP tipada?
“Tipada” significa que a resposta declara seu tipo de mídia. O campo Content-Type informa ao destinatário o formato da representação e o processamento pretendido. Aqui, esse formato é HTML. Ele não fornece um esquema de aplicação campo a campo. RFC 9110, seção 8.3
Uma resposta HTTP/1.1 tem uma linha de status, campos de cabeçalho, uma linha em branco e um corpo opcional. Portanto, você pode enviar metadados de transporte nos cabeçalhos e o documento completo no corpo sem criar uma solicitação de metadados separada. RFC 9112, seção 2.1
Para esta tarefa de publicação, use o guia de posicionamento a seguir. Ele separa as informações que descrevem a representação HTTP daquelas que descrevem a página.
| Informação | Localização | Exemplo |
|---|---|---|
| Formato e codificação da representação | Cabeçalho HTTP | Content-Type: text/html; charset=utf-8 |
| Título do documento | Cabeçalho HTML | <title>Formas de papel: círculo e quadrado</title> |
| Resumo da página | Cabeçalho HTML | <meta name="description" content="A short guide to arranging paper circles and squares."> |
| Conteúdo destinado ao leitor | Corpo HTML | Título, introdução e instruções de disposição |
O WHATWG define o elemento title como o título ou nome do documento e o valor dos metadados de descrição como uma descrição da página. Use um título e, no máximo, uma declaração de descrição. Como ficam dentro do documento HTML, o conteúdo e os metadados descritivos são transmitidos juntos. Padrão HTML: metadados do documento
Como criar uma prévia funcional em um Mac?
Abra o Terminal e confira os comandos disponíveis:
python3 --version
curl --version
O programa abaixo requer Python 3.7 ou posterior e usa apenas a biblioteca padrão. Se python3 não estiver disponível, siga as instruções oficiais de instalação para macOS e reabra o Terminal. A documentação do Python descreve tanto o instalador quanto como invocar python3 no terminal. Usando Python no macOS
Cole o bloco completo abaixo no Terminal, incluindo o comando inicial e a linha final PY. Isso executa o programa diretamente; não cria nem sobrescreve um arquivo. Deixe esta janela do terminal aberta enquanto verifica a página.
python3 - <<'PY'
from html import escape
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
TITLE = "Paper Shapes: Circle and Square"
SUMMARY = "A short guide to arranging paper circles and squares."
PAGE = f"""<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{escape(TITLE)}</title>
<meta name="description" content="{escape(SUMMARY, quote=True)}">
</head>
<body>
<main>
<h1>{escape(TITLE)}</h1>
<p>{escape(SUMMARY)}</p>
<h2>Try a simple arrangement</h2>
<p>Place one paper circle beside one paper square.</p>
<p>Switch their positions — then compare the two arrangements.</p>
</main>
</body>
</html>
""".encode("utf-8")
class Handler(BaseHTTPRequestHandler):
protocol_version = "HTTP/1.1"
def respond(self, include_body):
if self.path != "/paper-shapes":
self.send_error(404, "Page not found")
return
self.send_response(200)
self.send_header("Content-Type", "text/html; charset=utf-8")
self.send_header("Content-Length", str(len(PAGE)))
self.end_headers()
if include_body:
self.wfile.write(PAGE)
def do_GET(self):
self.respond(True)
def do_HEAD(self):
self.respond(False)
if __name__ == "__main__":
with ThreadingHTTPServer(("127.0.0.1", 8000), Handler) as server:
print("Preview: http://127.0.0.1:8000/paper-shapes", flush=True)
try:
server.serve_forever()
except KeyboardInterrupt:
pass
PY
O manipulador usa os métodos de resposta documentados do Python: send_response() inicia a resposta, send_header() adiciona campos e end_headers() conclui a seção de cabeçalhos antes da gravação dos bytes do corpo. Documentação do servidor HTTP do Python
O exemplo define deliberadamente TITLE e SUMMARY uma única vez. Esses valores fornecem tanto os metadados quanto o texto visível, facilitando revisões consistentes neste pequeno documento. Em uma página mais longa, a descrição pode ser diferente do parágrafo inicial, desde que resuma o mesmo assunto com precisão.
A página é codificada antes de o comprimento ser calculado. O protocolo HTTP define Content-Length em octetos, ou bytes; contar caracteres daria um resultado incorreto por causa do travessão deste exemplo. RFC 9110, seção 8.6
Como verificar se o conteúdo e os metadados chegaram juntos?
Abra uma segunda janela do Terminal e execute este comando. Ele faz uma solicitação normal de documento e exibe tanto os cabeçalhos da resposta quanto o conteúdo:
curl -i --max-time 10 http://127.0.0.1:8000/paper-shapes
A opção -i inclui os cabeçalhos da resposta no mesmo fluxo de saída que o corpo. O limite de tempo restringe a transferência a dez segundos. Essas opções estão documentadas no manual de linha de comando do curl.
Confira a saída nesta ordem:
- A linha de status deve informar
200 OK. - Um único campo
Content-Typedeve declarartext/html; charset=utf-8. - Após a linha em branco que encerra a seção de cabeçalhos, o HTML deve conter o título e a descrição.
- O mesmo corpo deve conter as instruções sobre as formas de papel.
- O travessão deve aparecer corretamente no texto decodificado.
Em seguida, digite http://127.0.0.1:8000/paper-shapes na barra de endereços do Safari. A página visível deve mostrar o título, o resumo e as instruções. A declaração de descrição é um metadado; sua presença deve ser verificada na marcação retornada, e não deduzida pela aparência da página.
Você também pode verificar a solicitação que retorna apenas os cabeçalhos:
curl -I --max-time 10 http://127.0.0.1:8000/paper-shapes
Isso envia HEAD, portanto não pode verificar se o corpo contém o título ou a descrição. Uma resposta HEAD omite o conteúdo, embora descreva a representação correspondente; use a verificação anterior com GET para inspecionar o documento real. RFC 9110, seção 8.2
Se a prévia não funcionar, use o sintoma para escolher a próxima ação:
| Sintoma | Próxima ação |
|---|---|
| A inicialização informa que o endereço já está em uso | Altere 8000 para 8001 no programa, execute-o novamente e use 8001 em todos os comandos de prévia. |
| A solicitação informa uma falha de conexão | Confira se o primeiro terminal ainda mostra a prévia em execução e se as portas correspondem. |
A resposta é 404 |
Use exatamente /paper-shapes; este exemplo não aceita uma barra final nem uma string de consulta. |
| O navegador ainda mostra uma versão anterior | Pare o programa com Control-C, execute novamente o bloco editado e recarregue a página. |
| O título parece correto, mas faltam metadados | Inspecione a saída de GET e confirme que as declarações estão dentro do cabeçalho do documento. |
O que o Google Search pode usar desta resposta?
Um título descritivo, uma descrição precisa e um texto visível útil fornecem ao Google elementos documentados para apresentar uma página. O Google lista o elemento title, o título visual principal, os elementos de título e outras fontes entre os dados usados para gerar automaticamente links de título. Mantenha esses elementos coerentes com o assunto do documento. Como influenciar seus links de título nos resultados da pesquisa
O Google gera trechos principalmente a partir do conteúdo da página e, às vezes, usa a meta description quando ela descreve a página com mais precisão. Pesquisas diferentes podem gerar trechos diferentes. Considere a descrição um resumo útil, não uma legenda fixa para os resultados da pesquisa. Controle seus trechos nos resultados da pesquisa
No exemplo sintético, a descrição promete um breve guia de disposição, e o corpo apresenta esse guia. Ao substituir o texto de exemplo, verifique explicitamente essa relação: alguém que leia apenas a descrição deve ter uma expectativa precisa sobre a página.
Adicionar nomes de metadados personalizados não garante que sejam compatíveis. O Google afirma que ignora as meta tags que não aceita. Use os campos documentados pelo Google para os metadados voltados à pesquisa; um campo inventado para seu próprio aplicativo requer um consumidor definido separadamente. Meta tags e atributos aceitos pelo Google
Como transformar a prévia em um padrão de publicação pública?
O endereço local deste guia é uma prévia no computador, não uma página publicada. O Python também documenta que http.server não é recomendado para produção. Transfira a estrutura HTML e os requisitos da resposta para seu sistema de publicação, em vez de usar esta demonstração como serviço público de hospedagem. Documentação do servidor HTTP do Python
Se você usa um sistema de gerenciamento de conteúdo, procure os controles documentados para o título da página e a meta description. O Google observa que um CMS pode oferecer configurações de pesquisa em vez de edição direta do HTML. Associe esses controles aos campos demonstrados aqui e inspecione a resposta do documento gerado. Orientações do Google sobre como adicionar meta descriptions
O HTTP aceita representações multipart, mas essa é uma escolha diferente de empacotamento. Para esta tarefa de documento legível pelo navegador, a estrutura HTML já permite incluir o conteúdo e os metadados do documento em uma única representação. Escolher multipart exigiria que o consumidor processasse esse formato, algo desnecessário neste guia. RFC 9110, seção 8.3.3
A verificação de conclusão é concreta: uma única solicitação de documento bem-sucedida retorna o tipo de mídia correto, um corpo HTML completo, um título e uma descrição precisos e o texto que os leitores procuram. Aplique essa verificação tanto à resposta pública final quanto à prévia local, para que a saída do sistema de publicação corresponda ao documento preparado.
Fontes
- RFC 9110: semântica HTTP — IETF / RFC Editor.
- RFC 9112: HTTP/1.1 — IETF / RFC Editor.
- Padrão HTML: metadados do documento — WHATWG.
- Usando Python no macOS — Python Software Foundation.
- http.server — servidores HTTP — Python Software Foundation.
- curl — como usar — curl.
- Como influenciar os links de título no Google Search — Google Search Central.
- Como escrever meta descriptions — Google Search Central.
- Meta tags e atributos aceitos pelo Google — Google Search Central.