Вобще данная тема достаточно избитая и Google и Яндекс выдадут вам кучу ссылок и массу информации на данную тему. Но как показала практика все что мне попадалось на деле из рецептов фактически не работало. С индексацией Google можно вобще не экспериментировать - Blogspot принадлежит Google и индексируется там все чертовски быстро. А вот с Яндексом все гораздо интереснее оказалось. Но я прошел этот квест и добился того что Яндекс стал принимать sitemap моего блога, размещенного на Blogspot.
Скажу сразу - мой путь несколько тернист и имеет ряд особенностей. Во первых для своего блога на Blogspot я использую свое доменное имя. Поэтому если у вас его нет вам мой способ скорее всего не подойдет. Во вторых потребуется дополнительный хостинг с поддержкой php и возможностью привязки к нему отдельного имени. Так как все это у меня в наличии и избытке, то и проэксперементировать мне было легко.
Сразу скажу что попытки скормить разного рода URL стандартной RSS от блога заканчивались всегда тем что в разделе Яндекс вебмастер появлялась ошибка "Невалидный XML". Дело в том что RSS поток от блога с Blogspot не совсем соответствует формату который хочет получить Яндекс. Именно поэтому все попытки изменения параметров ленты в URL приводят к одному - Яндекс ее игнорирует.
Наиболее подходящим источником для получения sitemap Яндекса является запрос, аналогичный вот этому (естественно вместо моего домена следует указывать ваш)
http://www.unsam.ru/atom.xml?redirect=false&start-index=1&max-results=999
В этом URL достаточно все понятно, сначала ваш домен, к которому привязан блог на Blogspot, и затем в параметрах номера ваших статей - данный запрос выдает с 1 по 999. Google его проглатывает весьма успешно в отличии от Яндекса.
Но раз так, значит надо данную ленту предварительно обработать в необходимый формат. Поможет нам в этом скрипт который возьмет ленту с блога и переделает ее в нужный формат для Яндекса. Скрипт следует размещать ну естественно на сервере который во первых сможет его обработать (данный скрипт реализован на php), во вторых он должен находится в том же домене, таковы правила описанные в документации. В моем случае мой блог имеет адрес www.unsam.ru - соответственно я добавил в ДНС у себя имя fs.unsam.ru, привязал к своему хостингу и на этом адресе разместил свой скрипт. Скрипт получает URL запроса RSS ленты, преобразует его в формат Яндекса и выдает тут же результат.
В результате я наконец получил правильную картину в Яндекс Вебмастере!
Как видно из скриншота - срипт отработал все корректно, а всякие рецепты по подсовыванию URL стандартной ленты RSS как видите закончились ни чем. ( Я не удаляю эти ленты по одной причине - вдруг однажды Яндекс одумается и начнет их принимать - тогда и данные костыли отпадут).
В своих поисках я еще натыкался на разные рецепты - размещение статического файла где-либо на другом вашем сайте, полученного с помощью какого-либо генератора, но это получается статическое решение, которое требует постоянных хоть и незначительных но трудов. В тоже время размещение sitemap на домене отличном от индексируемого вступает в некоторое противоречие с документацией по sitemap и далеко не факт что будет корректно принято и обработано.
При всем при этом я не могу сказать что Яндекс как то плохо индексирует блоги Blogspot, но иногда этот процесс слишком затянут по времени, а иногда будто не видит отдельные URL. Поэтому нужен ли вам этот танец с бубном решать непосредственно вам.
Исходный код скрипта:
<?php
header('Content-Type: text/xml;charset=utf-8;');
ini_set('display_errors',0);
$url = isset($_GET['url'])?$_GET['url']:null;
if ( !$url ) exit('no url');
$context = stream_context_create(array(
'http' => array(
'method' => 'GET',
'timeout' => 10,
)
));
$xml_in = new DOMDocument();
$xml_in->load($url);
$out = new DOMDocument('1.0','UTF-8');
$urlset = $out->createElement('urlset');
$changefreq = $out->createElement('changefreq','daily');
if ( !$xml_in ) exit('not XML file');
foreach( $xml_in->getElementsByTagName('entry') as $entry ){
$updated = $entry->getElementsByTagName('updated')->item(0)->nodeValue;
$links = $entry->getElementsByTagName('link');
$link = $links->item( $links->length - 1 );
$locnode = $out->createElement('loc',$link->getAttribute('href'));
$lastmodnode = $out->createElement('lastmod',$updated);
$urlnode = $out->createElement('url');
$urlnode->appendChild( $locnode );
$urlnode->appendChild( $lastmodnode );
$urlnode->appendChild( $changefreq->cloneNode(true) );
$urlset->appendChild($urlnode);
}
$out->appendChild($urlset);
echo $out->saveXML();
?>
URL адрес для получения sitemap будет выглядеть приблизительно так (естественно используйте свой домен):
http://fs.unsam.ru/sitemap.php?url=http%3A%2F%2Fwww.unsam.ru%2Fatom.xml%3Fredirect%3Dfalse%26start-index%3D1%26max-results%3D999
Удачи!В случае копирования данного мануала - оставляйте ссылку - возможны коррективы, скрипт написан сутки назад моим другом, возможны коррективы.
2 комментария:
А куда именно в коде вставлять этот скрипт?
В коде самого блога ничего делать не требуется. Этот скрипт должен работать на внешнем сервере которым вы полностью управляете.
Отправить комментарий