vBulletin и XML Sitemap

в разделе SEO | Метки: XML, vBulletin, PHP

Честно говоря я ожидал большего от форума за 200 баксов, сам по себе он конечно хороший, и новую тему красивую сделали, Ajax фишки всякие, интеграция с Facebook и прочее, но в части - SEO косяков хватает. Например когда яндекс ходит по сайту, то за каким то хреном vBulletin добавляет к урлам идентификатор сессии типа такого http://forum/showthread.php?t=25&s=23fa3a53f618eef974590df0991c8df3&pagenumber= так же отметил жирным тут pagenumber который в данном случае вообще не нужен в топике в котором всего одна страница. Тут я описал как избавиться от session id в урлах для поисковиков на примере Яндекса. Дальше идут разнообразные сортировки по количеству постов, количеству просмотров, названию темы, автору темы, последнему ответившему, и это все в каждом из разделов форума. То есть на каждый раздел форума получается 5 дублирующих страниц, и это не считая постраничной навигации по каждой из подобных страниц. При этом какая из них вылетит в Supplemental Results в гугле остается только гадать. К счастью от кучи этого дерьма можно избавится с помощью robots.txt, который я обновил после того как только установил и настроил форум

Это мой обновленный robots.txt для vbulletin, в нем остались куски которые запрещают индексацию старых урлов оставшихся от SimpleMachines Forum (SMF).

User-agent: *
Disallow: /search.php
Disallow: /faq.php
Disallow: /memberlist.php
Disallow: /showgroups.php
Disallow: /register.php
Disallow: /calendar.php
Disallow: /sendmessage.php
Disallow: /online.php
Disallow: /newthread.php
Disallow: /attachment.php
Disallow: /tags.php
Disallow: /misc.php
Disallow: /printthread.php
Disallow: /member.php
Disallow: /members/
Disallow: /archive/
Disallow: /subscription.php
Disallow: /usercp.php
Disallow: /clientscript/
Disallow: /forums/
Disallow: /threads/
Disallow: /xmlsitemap.php
Disallow: /*&sort*
Disallow: /*&sort=*
Disallow: /*&mode*
Disallow: /*&mode=*
Disallow: /index.php?board=*
Disallow: /index.php?action=*
Disallow: /index.php?topic=*
 
Sitemap: http://forum/sitemap.xml

В форум так же встроена функциональность по созданию файлов XML Sitemaps, которая написана достаточно убога и вот почему: урл к карте сайта выглядит так http://forum/xmlsitemap.php этот скрипт генерит Sitemap Index в котором ссылки на урл по которому выдается sitemap по темам и разделам форума. Вот что он генерит

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
	<loc>http://forum/xmlsitemap.php?fn=vbulletin_sitemap_forum_0_32.xml.gz</loc>
	<lastmod>2010-06-13T07:17:54-05:00</lastmod>
</sitemap>
<sitemap>
	<loc>http://forum/xmlsitemap.php?fn=vbulletin_sitemap_thread_1_16.xml.gz</loc>
	<lastmod>2010-06-13T07:17:54-05:00</lastmod>
 
</sitemap>
</sitemapindex>

За каким то чертом скрипт этот постоянно меняет vbulletin_sitemap_forum_0_32.xml.gz цифры, отмеченные жирным. Уже несколько раз было так что приходит бот, а вместо файла получает пустоту. Так что скрипт этот я запретил в robots.txt и написал свой и добавил его в cron, ниже его содержимое, может кому пригодится. Пока что урлов на форуме у меня мало, так что скрипт не создает несколько XML Sitemap файлов и Sitemap Index так же как и не сжимает все это. В дальнейшем когда это понадобится добавлю

<?php
#!/usr/local/bin/php

<?php

$dbUser 
'your_username';
$dbName 'your_db_name';
$dbPassword 'TOP_SECRET';
$sitemapSavePath '/path/to/forum';
$forumUrl 'http://forum/';
$db = new mysqli('localhost'$dbUser$dbPassword$dbName);

$dom = new DOMDocument('1.0''UTF-8');
$dom->formatOutput true;

$urlset $dom->createElement('urlset');
$dom->appendChild($urlset);
$urlsetAttr $dom->createAttribute('xmlns');
$urlset->appendChild($urlsetAttr);
$urlsetAttrText $dom->createTextNode('http://www.sitemaps.org/schemas/sitemap/0.9');
$urlsetAttr->appendChild($urlsetAttrText);

$result $db->query('SELECT threadid,lastpost FROM thread');
while (
$obj $result->fetch_object())
{
    
$url $dom->createElement('url');
    
$urlset->appendChild($url);
    
$loc $dom->createElement('loc');
    
$url->appendChild($loc);
    
$urlTxt $dom->createTextNode($forumUrl 'showthread.php?t=' $obj->threadid);
    
$loc->appendChild($urlTxt);
    
$lastmod $dom->createElement('lastmod');
    
$url->appendChild($lastmod);
    
$lastmodTxt $dom->createTextNode(date('Y-m-d'$obj->lastpost));
    
$lastmod->appendChild($lastmodTxt);
}

$result $db->query('SELECT forumid,lastpost FROM forum');
while (
$obj $result->fetch_object())
{
    
$url $dom->createElement('url');
    
$urlset->appendChild($url);
    
$loc $dom->createElement('loc');
    
$url->appendChild($loc);
    
$urlTxt $dom->createTextNode($forumUrl 'forumdisplay.php?f=' $obj->forumid);
    
$loc->appendChild($urlTxt);
    if (
$obj->lastpost)
    {
        
$lastmod $dom->createElement('lastmod');
        
$url->appendChild($lastmod);
        
$lastmodTxt $dom->createTextNode(date('Y-m-d'$obj->lastpost));
        
$lastmod->appendChild($lastmodTxt);
    }
}

$domHandle fopen($sitemapSavePath 'sitemap.xml''w');
fwrite($domHandle$dom->saveXML());
fclose($domHandle);
?>

Комментарии