Pull to refresh

Закрываем зеркало сайта от индексации правильно

Reading time4 min
Views6.2K
Здравствуй, %habrauser%.
Сегодня я покажу как не надо закрывать от индексации зеркало сайта, и как закрыть его правильно.

Предыстория

Я работаю web-мастером в одной крупной для нашего города компании.
Мы сделали клиенту сайт, для рекламирования и продажи своей продукции.
Клиент выбрал доменное имя в зоне .RU, и сайт около года успешно работал. Сайт по настоящее время обслуживается и редактируется по мере необходимости у нас.
Через какое-то время клиент захотел второй домен для сайта, но в зоне .РФ.
Он самостоятельно нашёл «профессиональных seo-специалистов продвигальщиков», сайт которых стоял на первом месте в выдаче Яндекса по определенным запросам.
С ними он заключил договор, и ежемесячно отгружал немалую сумму денег в эту seo-конторку.
Спустя пару недель сеошники наконец проснулись, связались с нами и получили ftp доступы к сайту, а так же пароль от админки сайта.

Началась «оптимизация»

Всё началось с того, что они не разобрались в движке сайта PHPShop.
Отправили нам письмо, мы им сообщили где что редактируется, в каком файле находятся нужные им теги, а так же в довесок дали немного ссылок на официальную документацию.

Сам сайт устроен так, что скелет вёрстки главной страницы находится в файле index.tpl, а html-скелет остальных внутренних страниц находится в файле shop.tpl. Сам же контент находится в базе данных и редактируется через админку с помощью визуального редактора, либо в виде source html.

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

Горе-оптимизаторы так и не разобравшись в элементарной админке, напичкали сайт своими скриптами костылями, которые мешали нормальной работе фреймворка и шли в разрез со здравым смыслом. Самое безобидное — сделали статичную версию главной, и положили этот статичный index.html рядом с index.php.

Далее, через свои скрипты, сделали переадресацию с index.php на index.html
Зачем? Закрывая глаза на то, что всё редактируется через админку, можно же через htaccess и mod_rewrite сделать такую переадресацию на уровне веб-сервера написав несколько строк, и не подключать mod_php для вывода 301 заголовка...

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

Я всё делаю по т.з., сохраняю, и начинаю медленно сходить с ума.
Полез в базу — информация новая. Полез ковыряться в движке, и дебаг показывает что информация выдаётся правильно. Захожу по ftp, и нахожу 4 незнакомых скрипта в корне сайта, в названии которых есть наименование seo-компании.

Около часа ковырялся в их коде. К слову, php код их скриптов удостоен почетного места на ресурсе govnokod.ru

Поправляю за ними косяк, переношу проделанную ими работу из статичного index.html в базу данных движка.

«Нам сюрпризов не жалко»

Еще через пару недель выясняется новый косяк. Именно тот, о котором данный тред.

Клиент звонит и злостно говорит что мы опять что-то натворили на сайте, и ничего не работает. Мы в недоумении начинаем опять разбираться в проблеме.

Заходим на главную страницу зеркала в зоне РФ, и видим ошибку 404.
Снова начинаем немного удивляться умению добавить людям работы на ровном месте, и задаваться вопросом «как?».
Заходим на основной домен в зоне.ру (они его и продвигают) — всё нормально.
Опять лезу ковыряться в коде горе-оптимизаторов.

И… Нахожу следующий код:
Доменные имена специально не раскрываю, а так же умолчу какая именно seo компания так извращается

if($_SERVER['HTTP_HOST']!='domain.ru'&&$_SERVER['HTTP_HOST']!='www.domain.ru') {
$page=file_get_contents_curl('http://domain.ru/hjgjgjhgjh');
$page=iconv('utf-8','windows-1251',$page);
header('HTTP/1.1 404 Not Found',true,404);
$page=str_replace('<head>','<head><base href="http://domain.ru/">',$page);
echo $page;
echo 'not found';
exit();
}


facepalm.jpg

Как мы видим, они не захотели что бы зеркало попадало в индекс Яндекса, и сделали зверский костыль.

Сношу их индусский код, и делаю следующее:

Создаю файл robots.php, и пишу туда следующее:
<?php

header("Content-type: text/plain"); // отправляем заголовок, который указывает что обрабатываться должно как простой текст
if(strpos($_SERVER['HTTP_HOST'], 'domain.ru') === false) { // если хост не равен основному домену, то:
	echo "User-agent: *\nDisallow: /\nHost: domain.ru"; // выводит что индексация запрещена, и основной сайт находится по другому адресу
} else { // если хост равен domain.ru, то выводится то что нам нужно
	
?>
User-agent: Yandex
Disallow: /gbook/ID
Disallow: /search/
Disallow: /highslide/
Disallow: /java/
Disallow: /license/
Disallow: /pageHTML/
Disallow: /tagcloud/
Disallow: /data/
Disallow: /capcha/
Disallow: /pages/
Host: domain.ru

User-Agent: Slurp
Disallow: /

User-agent: * 
Disallow: /gbook/ID
Disallow: */*.swf
Disallow: /search/
Disallow: /highslide/
Disallow: /java/
Disallow: /license/
Disallow: /pageHTML/
Disallow: /tagcloud/
Disallow: /webstat/
Disallow: /data/
Disallow: /capcha/
Disallow: /pages/

Sitemap: http://domain.ru/sitemap.xml

<?php } ?>


Пол дела сделано, теперь удаляем robots.txt, и в файл .htaccess добавляем такие строки (обязательное условие apache+mod_rewrite):
RewriteEngine On
RewriteRule ^robots.txt$ robots.php


UPD: конвертированное правило для nginx Лично не проверял, но должно работать.
Если что напишите в коммент — поправлю

location = /robots.txt {
  rewrite ^(.*)$ /robots.php;
}


Всё! Когда роботы запрашивает robots.txt, сервер отдаёт им файл robots.php

P.S. Надеюсь если кто-то использует подобные кривые способы закрытия зеркала, добавит это к себе в «копилку» скриптов для оптимизации.

P.P.S. Так уж сложилось, что в настоящее время профессиональных seo компаний очень мало, и получается вечное противостояние «сеошники VS разработчики», одни делают сайт, другие ломают его функциональность за счёт кривых рук и непонимания.

P.P.P.S. Если кому то интересно, всё таки могу указать ссылочку на ту seo-конторку

Спасибо за внимание!

UPD: Не в целях антирекламы, а в целях предосторожности: demis.ru — сеошники-герои данного треда.

UPD: Очередной случай. Полезли что-то делать, поехала вёрстка. Уже надоело за свой счёт и время поправлять их косяки
Tags:
Hubs:
Total votes 78: ↑60 and ↓18+42
Comments37

Articles