segunda-feira, 24 de maio de 2010

Sitemaps -- Como fazer e o que fazer com eles

Fala pessoal, vamos continuar o assunto de boas práticas e de design voltado ao usuário que abordei nos dois últimos posts desse blog.

Os sitemaps são uma poderosa ferramenta de organização e SEO. Alguns buscadores aceitam que você envie o sitemap o seu site. Assim eles sabem exatamente o que indexar, ao invés de apenas ir navegando e filtrando. Outro lugar onde você pode fazer referência ao seu sitemap é no arquivo robots.txt (falaremos brevemente sobre esse arquivo num post futuro).

Isso sem contar que um sitemap em XML pode servir de base para que você crie seu sitemap HTML (seja server-side, ou com transformação XSLT).

Chega de papo. Vamos ao que interessa. Um arquivo sitemap é nada mais que um arquivo XML, com o seguinte formato:

O arquivo de sitemap

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
 <url>
  <loc>http://www.example.com/</loc>
  <lastmod>2005-01-01</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.8</priority>
 </url>
</urlset>

Explicando cada tag.
urlset - é a raíz do arquivo. Só pode existir uma.
url - é usada para englobar as propriedade de cada página. Cada página do site precisa de um conjunto desses.
loc - é o endereço da página. Importante: esse endereço deve ser escapado. Mais detalhes abaixo.
lastmod - é a data da última modificação da página, no formato AAAA-MM-DD
changefreq - é a frequencia com que a página tem seu conteúdo atualizado (aceita os valores always, hourly, daily, weekly, monthly, yearly, never - sempre, horário, diário, semanal, mensal, anual, nunca respectivamente).
priority - define a prioridade da página em relação ao site. Os valores vão de 0.01 a 1.00

Explicações

As tags lastmod, changefreq e priority são opcionais. Note que o changefreq dá apenas uma indicação aos buscadores. Uma página marcada com always ou hourly pode ser indexada com uma frequencia menor do que isso. Uma página marcada com yearly, pode ser indexada mais de uma vez por ano. Ou seja, ela é apenas uma dica. A indexação de fato é feita pelos buscadores, e não há como garantir isso com precisão absoluta.

Para sites dinâmicos, criar o sitemap na mão pode ser bastante complicado. Então podemos criar um script que gere o sitemap. Eu criei um script rápido em PHP que faz isso.

Outra observação a ser feita é em relação ao uso da tag priority. Setar todas as páginas com prioridade 1.00 (mais importante) é uma tentação como todas as outras práticas de black hat SEO. Não faça isso!

Na dúvida deixe o valor 1.00 para a home, e outros valores mais baixos para outras páginas. Uma boa abordagem seria contar quantos níveis existem no path para cada página, e daí sim basear o valor de cada página. Por exemplo, para o endereço http://www.seusite.com.br/artigos /subcategoria/nome-do-artigo.html, vemos a seguinte estrutura:
0 - http://www.seusite.com.br/
1 - http://www.seusite.com.br/artigos/
2 - http://www.seusite.com.br/artigos/subcategoria/
3 - http://www.seusite.com.br/artigos/subcategoria/nome-do-artigo.html

Daí podemos fazer a seguinte associação de valores:
0 - 1.00
1 - 0.85
2 - 0.80
3 - 0.75

Ou mesmo inverter os dois últimos números, 0.80 e 0.75 (isso porque o conteúdo de um artigo geralment é mais importante do que o índice, mas uma seção de artigos é mais importante que um artigo sozinho).

Uma outra abordagem para calcular o valor da prioridade seria ver qual o real valor do conteúdo de cada página para o site. Vamos supor que você escreveu um artigo muito bom, ou tem uma página de produtos que atrai mais visitas que sua própria página inicial - em outros termos, você tem uma outra fonte de entrada muito boa no seu site.

É normal e aceitável que esta página tenha um valor de prioridade maior na indexação, podendo ser mesmo 1.00 (> 80% das visitas vindo por mecanismos de busca achem seu site por esta página).

Em suma: o bom senso deve imperar.

E o escaping das URLs?

Pra fechar, deixe-me falar sobre o valor da tag mais importante de cada URL, a tag loc.
O valor para esta tag que contém a URL deve ser uma URL escapada - com os carateres especiais codificados.

Por exemplo, a URL http://www.seusite.com.br/usuários/josé123 deverá ser escrita no sitemap como
http://www.seusite.com.br/usu%C3%A1rios/jos%C3%A9.

Esse resultado pode ser obtido pelo javascript, usando a função encodeURI(), ou no PHP, com a função encodeurl. Note que o PHP também faz o encoding dos caracteres especiais como ":" e "/".

No meu script há uma ligeira adaptação da função encodeURL. Eu uso a função encodeURL, e depois a str_replace para voltar os caracteres de controle ao normal.

Bom, isso é tudo. No próximo artigo, um tapa no robots.txt. Até lá.
----------- keepReading

Nenhum comentário:

Postar um comentário