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:
- Criar a rota para geração do sitemap
- Criar o módulo ‘sitemap’ e a ação ‘xmlSitemap’
- Implementar a ação
- Criar e implementar o template de sucesso
Duas coisas importantíssimas que não podemos esquecer ao gerar a saída automaticamente:
- O resultado do sitemap deve ser sempre um XML! Defina o tipo de conteúdo como text/xml.
- 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