2017-12-13 Web-Blog

Blog

Динамическая генерация robots.txt и sitemap.xml для мультидоменных сайтов

Вобщем в свете предыдущего поста я продолжил причесывать свой новый сайт, а учитывая что это вики то тут вполный рост встает вопрос с поисковиками и robots.txt, и вот почему:

Этож wikiблять!!! тут у каждой страницы хуеватьма ревизий, и ссылки на каждую из них, куча перекресных ссылок итд, тоесть невьебенная такая куча мала как из миксера и все это индексируется поисковиками. Да я ебал как они в этом всем разбираюца😊 но тем не менее стараюца, но, не всегда правильно, поэтому лучше помочь, и вики помогают, говорят nofollow в meta там где индексировать не нада, но лучше помочь еще вдобавок - дав пинка в нужном направлении, тоесть запретив в robots.txt индексацию того что им не нада, дабы они не тратили лишнее время лазя по nofollow линкам, впринципе тут все просто.

Но блять я случайно пока ковырял модули вики набрел на один из них, точнее два, герерирующих sitemap, мне стало интересно что ето такое и я прочитал - оказывается еще один новомодный инструмент воздействия на роботов, ну и я решил - а чеп не заюзать и его до кучи - хуже то не будет... КАК Я БЛЯТЬ ОШИБАЛСЯ!!! 😊

но все по порядку - я радостно докинул модуль в вики - проверил генерит ли она етот sitemap - генерит, и, уже замахнулся вписать его в robots.txt но по не знанию как это сделать - обратился к документации, а там блять написано что относительную сцылку низзя нихуя - тока полную с именем домена, а у меня хуеватьма доменов и поддоменов - вот такой вот неожиданный ебаныйврот. кто эту хуйню придумал и зачем бошку ампутировать нада, нах она ему.

Но, тем не менее взялся так взялся - нада сделать же, ну выход очевиден - генерировать robots.txt динамически при запросе и подставлять там нужный домен - гавновапрос!!!

Сказано - Зделано:

#!/usr/bin/perl.
$| = 1;.

$server_name=$ENV{'SERVER_NAME'} || "megaprovider.ru";
$req_scheme=$ENV{'REQUEST_SCHEME'} || "http";

print "Content-type: text/plain\n\n";
print "Sitemap: $req_scheme://$server_name/sitemap.xml\n\n";
print <<'EOF';
User-agent: *.
Disallow: /?action=admin
Disallow: /?action=edit
Disallow: /?action=new
Disallow: /?action=history
Disallow: /?action=browse;diff=
Disallow: /?action=rc
Disallow: /?action=rss
Disallow: /?search=
Disallow: /?RecentChanges
Disallow: /?Comments_on_
Disallow: /?action=password
Disallow: /?search=
Crawl-delay: 1
EOF

условие по поводу servername на случай если вдруг кто придет сильно кривой и/или по http 1.0 без host хедера и тогда SERVER_NAME может быть не известно, но лучше туда всетаки выплюнуть чтото вменяемое чем http:///sitemap.xml, поэтому если SERVER_NAME пустое то подставляем туда один из доменов.

У меня Nginx, как этот скрипт к нему привернуть здесь почтишто в самом конце, к другим серверами готовых решений у меня нет но думаю у большинства должен быть какой то путь сделать аналогично.

Вобщем влепил я скрипт, проверил - работает - заебись, сижу смотрю че там поисковики творят, запрашивают ли мой sitemap али нет...

А творят они там хуйню 😊

Гугл и яндекс запросили, и скачали, остальные кравлеры и спайдеры воздержались и не запрашивали его, а дальше началась хуйня:

Хуйня с яндексом:

по какой то причине, хуяндекс начал запрашивать урлы каких ваще быть не может но шаблонно совпадающих с теми что есть, тоесть к примеру вот эта страница имеет адрес megaprovider.ru/?2017-12-13_Web-Blog, хуяндекс же запрашивал megaprovider.ru/0/?2017-12-13_Web-Blog, и так через рас иногда через 2, потом тоже самое но правильно, ну и тд.

Ну я поржал - яндек хуяндекс - даже бота нормально своего написать не могут😊 Но тут спустя гдето сутки гугол начал делать так же!!! А я поперхнулся и перестал ржать, что меня несколько огорчило нада сказать.

это меня озадачило - я начал капать глубже и все проверять, натравил несколько валидаторов, в том числе и самого яндекса - все сказали все заебись у тебя с sitemap и robots.txt, я в непонятках ваще, перерыл всю хуню котороую авторы этого sitemap гордо именуют стандартом - нихуя не нашол, даже зацепки никакой, в гугле тоже тишина - ниче подобного ниукого небыло, я блять уже все проверил, и кодировку, и файл, ПОБАЙТНО в хекс редакторе прочитал на соотвествие кодироке, а там блять UTF!!! ну хедер в хмлине немного староват был - поправил, вобщем БЛЯТЬ!!! - ВСЕ НИШТЯК и все по фэншую, тоесть по этому говностандарту. У меня схема frontend->backend из двух серверов - уже на какой то чудесный глюк в них начал думать, но, вовремя попробовал убрать этот sitemap - и все стало заебись через день-два, перестали они лазать по таким ссылкам.

Ну что за ебаныйврот?

Думал думал, положил хуй на это стандарт, зарылся в гугель - и не нашол нигде упоминания чтоп у кого то было нечто подобное зато нашол тьму страшилок типа низзя его класть не вкорень ато все что выше каюк - не проиндексируется или sitemap не заюзается, на другой домен тоже низзя ну итд, но ниче по делу- ваще тупик!!! И тут я начал искать другое - ну не могуж я блять быть первый кто генерит sitemap динамически и не в файл на диске а сразу по запросу выплевывая в клиента - ну да - дохуя всяких плагинов ко всяким вордпрессам и прочей хрени, генерят динамически так же и robots.txt и sitemap и все хуйню, но вот что характерно - нигде я не нашол чтоп ссылка на sitemap была типа динамической, У всег или сразу генерируется по запросу /sitemap.xml или какойнить реврайт чтоп при запросе sitemap.xml по факту запрос шол куда нада. А у меня она вида site/?action=sitemap, ну я ее так и отдавал в robots.txt, и думаю - ну неужели в этом херня - извратился и переделал - чтоп была доступна сразу по site/sitemap.xml.

И блять хуйня прошла кажись

Маловато еще времени прошло но вроде гугл с яндексом угомонились с этими кривыми ссылками, сижу жду дальше чтоп уж наверняка😊 И главное ведь не написано нигде.

Так что люди - не ставьте динамические ссылки на sitemap.xml.

  1. upd: mail.ru начал забирать sitemap чего раньше не делал.