995 visualizações

Sitemaps sem plug-ins no WordPress, ou em qualquer Site PHP

Inicialmente, eu usava um sitemap.txt,mas chegou um momento em que senti a necessidade de fornecer informações mais detalhadas aos buscadores, como hora de atualização de conteúdos, etc… Foi quando começou minha luta atrás de soluções eficientes e práticas.

No WordPress, testei o Plug-in google-sitemap-generator, mas não era exatamente o que eu queria e a busca continou. Então testei o karailievs-sitemap e comecei por alterar o cabeçalho do plug-in para incluir a folha de estilos do google-sitemap-generator, e gostei do resultado inicial, mas minha busca não ficou por aí e resolvi fazer novos testes, até chegar numa coisa bem simples, que resolveu meu problema.

Foi a partir do Google em espanhol que encontrei minha solução em www.galder.net, para o qual precisei apenas fazer pequenas alterações, a fim de ainda trabalhar com a folha de estilos do google-sitemap-generator, arquivo que pode ser encontrado na pasta include do plug-in, com o nome sitemap.xsl; mais algumas coisinhas para melhor trabalhar com o brinquedo. Para usar a coisa, você vai criar um arquivo chamado sitemap.php e depois de abrir ele com o bloco de notas, colar o seguinte conteúdo:

 

<?php require('wp-blog-header.php');
header("HTTP/1.1 200 OK");
header('Content-type: text/xml; charset=' . get_settings('blog_charset'), true);?>
<?php echo '<?xml version="1.0" encoding="UTF-8"?>'.'<?xml-stylesheet type="text/xsl" href="http://www.endereço_da_folha_de_estilos_do_google-sitemap-generator.com/sitemap.xsl"?>'; ?>
<urlset 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" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">   
<url>
<loc><?php bloginfo('url') ?></loc>
<lastmod><?php echo mysql2date('c', get_lastpostmodified('GMT'), false); ?></lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<?php
$t = time ();
$today = date ("Y-m-d H:i:s",$t);
$sitemap = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_status = 'publish' AND post_date < '$today' ORDER by post_modified DESC"); ?>
<?php foreach ($sitemap as $sitemap) {  ?>
<url>
<loc><?php echo get_permalink($sitemap->ID); ?></loc>
<lastmod><?php echo mysql2date('c', $sitemap->post_modified, false); ?></lastmod>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
</url>
<?php } ?>
</urlset>

 

Toda vez que o arquivo sitemap.php for chamado, ele mostrará todas as páginas do seu blog a serem indexadas pelos mecanismos de buscas, e com a folha de estilos do google-sitemap-generator, a coisa fica muito mais bonitinha. Porém, os mecanismos de buscas padronizaram o formato .xml para esse serviço, então você precisa incluir no seu arquivo .taccess, a linha RewriteRule ^sitemap.xml?$ ./sitemap.php [L] para que o arquivo sitemap.php seja reconhecido como sitemap.xml.

Para pingar os buscadores quando edito ou crio novos posts, uso uma ferramenta bastante boa, que é o plug-in maxblogpress-ping-optimizer, cujo único inconviniente é ter de aceitar pelo menos um E-mail de propaganda por dia, mas nada que não seja filtrado pelo anti-spam do Thunderbird.

Já para minhas páginas que não podem fazer parte do WordPress, depois de usar alguns geradores automáticos em PHP, além de encontrar soluções ligadas à SQL (que exigiam cadasto das URL com um trabalho a mais que para mim dava na mesma), optei por fazer algo relativamente manual, a partir da função filemtime() do PHP, visto que eu somente faço a inclusão da página, no momento em que ela é criada, e depois posso atualizar qualquer uma delas à vontadde (e atualizo com bastante freqüência), que o sitemap.xml sempre estará atualizado.

Para isso, tal qual descrevi acima, também inclui a linha RewriteRule ^sitemap.xml?$ ./sitemap.php [L] no .taccess e usei a folha de estilos do google-sitemap-generator para que a coisa ficasse mais bonitinha.

Para quem eventualmente queira seguir minha idéia, meu código ficou mais ou menos assim:

 

<?php header ( "Content-Type: application/xml");
echo '<?xml version="1.0" encoding="UTF-8"?>'.'<?xml-stylesheet type="text/xsl" href="http://www.endereço_da_folha_de_estilos_do_google-sitemap-generator.com/sitemap.xsl"?>'."\r\n"; ?>
<urlset 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" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<?php date_default_timezone_set("Brazil/East");

//para setar fuso horário brasil no servidor

echo '<url><loc>http://www.olocutor.com/</loc><lastmod>'.date("c", filemtime("index.php")).'</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url>'."\r\n";

//usei <changefreq>daily</changefreq><priority>1.0</priority> por ser minha página mais importante

echo '<url><loc>http://www.olocutor.com/microfone.php</loc><lastmod>'.date("c", filemtime("microfone.php")).'</lastmod><changefreq>weekly</changefreq><priority>0.5</priority></url>'."\r\n";
echo '<url><loc>http://www.olocutor.com/podblog.php</loc><lastmod>'.date("c", filemtime("podblog.php")).'</lastmod><changefreq>weekly</changefreq><priority>0.5</priority></url>'."\r\n";
echo '<url><loc>http://www.olocutor.com/quem-sou.php</loc><lastmod>'.date("c", filemtime("quem-sou.php")).'</lastmod><changefreq>weekly</changefreq><priority>0.5</priority></url>'."\r\n";
echo '<url><loc>http://www.olocutor.com/radios.php</loc><lastmod>'.date("c", filemtime("radios.php")).'</lastmod><changefreq>weekly</changefreq><priority>0.5</priority></url>'."\r\n";
echo '<url><loc>http://www.olocutor.com/SoundForge.php</loc><lastmod>'.date("c", filemtime("SoundForge.php")).'</lastmod><changefreq>weekly</changefreq><priority>0.5</priority></url>'."\r\n";
echo '<url><loc>http://www.olocutor.com/trava-linguas.php</loc><lastmod>'.date("c", filemtime("trava-linguas.php")).'</lastmod><changefreq>weekly</changefreq><priority>0.5</priority></url>'."\r\n";
echo '<url><loc>http://www.olocutor.com/vozhumana.php</loc><lastmod>'.date("c", filemtime("vozhumana.php")).'</lastmod><changefreq>weekly</changefreq><priority>0.5</priority></url>'."\r\n";

//pode incluir quantas novas páginas quiser, seguindo o modelo acima
echo '<url><loc>http://www.olocutor.com/zararadio.php</loc><lastmod>'.date("c", filemtime("zararadio.php")).'</lastmod><changefreq>weekly</changefreq><priority>0.5</priority></url></urlset>'; ?>

 

Você também pode visitar http://www.olocutor.com/sitemap.xml para conhecer o resultado da minha explicação do código para páginas comuns, e http://www.blog.olocutor.com/sitemap.xml, para conhecer o resuultado final no WordPress.

Estou compartilhando essas minhas aventuras, porque isso ainda pode ser útil para mais alguém.

Ou consulte o dia da semana ou Datas Comemorativas em qualquer dia do ano de 2010.


Por favor, selecione uma categoria:




Por favor, Escolha um dia:




Por favor, selecione um mês:







Esta entrada foi publicada em Dicas para Sites. Adicione o link permanenteaos seus favoritos.


Indicar esse post por E-Mail Indicar esse post por E-Mail

0 trackback para Sitemaps sem plug-ins no WordPress, ou em qualquer Site PHP.

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>