Como gerar o sitemap XML automaticamente?

Publicado quinta-feira, 29 de julho de 2010

Pretendo começar agora uma jornada de artigos sobre symfony, o framework de produtividade que usamos aqui na agência. Symfony é um framework open-source para PHP, que fornece uma arquitetura MVC completa e fácil de usar. Pretendo em outros posts falar um pouco mais sobre o symfony e sua instalação. Hoje porém, farei um tópico sobre um ítem muito importante para a otimização das páginas criadas com o framework em mecanismos de buscas (SEO): a criação de sitemaps dinâmicos.

Todos sabem que é fundamental criar o mapa do seu site (sitemap.xml) e enviá-lo ao Google. Através do sitemap o Google decide quais páginas do seu site serão indexadas. É importante também mantê-lo sempre atualizado e com as prioridades definidas corretamente. Não detalharei a criação e sintaxe do sitemap.xml (para isso recomendo o artigo “Sitemap.XML – O Guia Completo” da Mestre SEO).

A estrutura do arquivo de definição do mapa do site é bastante simples. Existem 6 elementos disponíveis, e destes, apenas 3 são obrigatórios:
1. urlset – o elemento raiz para o sitemap;
2. url – elemento xml para cada url, que contará todas as informações sobre a mesma;
3. loc – elemento interno que contará o endereço real da página que você deseja que seja indexada.

O Google permite que você especifique a localização do seu arquivo xml caso você esteja usando o Google Webmaster Tools, mas caso você não o esteja usando, os buscadores tentarão localizá-lo no endereço http://www.seusite.com.br/sitemap.xml.

Atualmente, grandes sistemas e bons frameworks permitem que você gere novas páginas automaticamente (um novo post em um blog por exemplo), porém não o ajudam muito a informar aos buscadores sobre essas mudanças.

Com o symfony você pode automatizar o processo de geração do sitemap, em 4 passos:

  1. Criar a rota para geração do sitemap
  2. Criar o módulo ‘sitemap’ e a ação ‘xmlSitemap’
  3. Implementar a ação
  4. Criar e implementar o template de sucesso

Duas coisas importantíssimas que não podemos esquecer ao gerar a saída automaticamente:

  1. O resultado do sitemap deve ser sempre um XML! Defina o tipo de conteúdo como text/xml.
  2. A ação de geração do sitemap não pode ser decorada com o layout padrão de seu sistema. Utilize a chamando sfAction::setLayout(false).

Para explicar nosso sistema de geração automática utilizaremos o exemplo de um sistema de notícias, em que cada nova notícas terá sua url própria e uma entrada no mapa. Devemos assumir o seguinte:

1. A aplicação de nosso projeto onde ficará nosso módulo ‘sitemap’ será a ‘frontend’.
2. A aplicação contém o modelo ‘Noticias’ com um método que lista todas os registros.
3. Seu servidor possui o módulo ‘mod_rewrite’ do apache habilitado, para que seu index.php de sua aplicação não seja exibido.

Criando a rota XML para o sitemap

/apps/frontend/config/routing.xml

xml_sitemap:
    url:  /sitemap.xml
    param:  { module: sitemap, action: xmlSiteMap }

Criando o módulo ‘sitemap’

Utilize o script para criação de módulos abaixo (ou através de IDEs que automatizem o processo. Recomendo fortemente o uso do NetBeans, que a partir da versão 6.8 oferece integração nativa com o symfony).

./symfony generate:module frontend sitemap

O comando acima irá criar o módulo sitemap em sua aplicação. Abra o arquivo de ações do novo módulo criado (/apps/frontend/modules/sitemap/actions.class.php) e crie uma nova ação chamada generateXmlSitemap.

public function generateXmlSitemap(sfRequest $request){

}

Implementando a ação

Adicione as seguintes linhas ao seu método:

public function generateXmlSitemap(sfRequest $request){
    $this->setLayout(false);
    $this->getResponse()->setContentType('text/xml');
    $this->noticias = Doctrine::getTable('Noticias')->findAll();
}

Repare que em nosso exemplo buscamos todas as notícias no sistema, nem nos preocupando com ordenação. Você poderá gerar seu mapa filtrando seus objetos e incluindo outros. O ideal é que todas as páginas ativas de seu sistema estejam listadas no sitemap.xml.

Crie e implemente o template de sucesso da ação

Por fim, crie o arquivo /apps/frontend/sitemap/templates/xmlSitemapSuccess.php e adicione o seguinte código:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<?php foreach($noticias as $noticia); ?>
<url>
    <loc><?php echo url_for('noticia/view?slug=' . $noticia->getSlug())?></loc>
    <lastmod><?php echo $noticia->getDateTimeObject('updated_at')->format('c')?></lastmod>
</url>
<?php endforeach ?>
</urlset>

Repare em meu exemplo utilizei o módulo ‘noticia’ com a action ‘view’ para exibir as notícias. Você poderia informar qualquer rota para gerar a url de seu objeto. É importante ressaltar também que no exemplo geraremos apenas o mapa com links de suas notícias. Não se esqueça de incluir suas outras páginas internas, e claro, a url de sua página inicial!

Espero que seja útil. Não deixe de enviar seu comentário! 😉

Fonte: Final Concept – Symfony: Generate Google XML Sitemap

Receba notícias no seu e-mail

Vamos te enviar nossas matérias para você ficar por dentro.

Compartilhe este conteúdo

Rolar para cima

Seu sucesso digital começa aqui. Entre em contato para começar uma nova jornada com sua empresa.

(31) 99890-5482

× Fale com a gente no Whatsapp