Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: 301 редирект только поисковиков | Проверка поискового робота
цитата
15/11/18 в 18:09
 Nic
Роскомнадзор забанил домен. Если просто редиректить на новый, то через 3 месяца зеркало забанят вновь. Мысль: редиректить (чтоб передать вес новому домену) только поисковых ботов.
Найти простой скрипт мне не удалось, сам удивился. (1, 2, 3) Языков не знаю, накидал "методом тыка" файл.
Код:
<?php

// прописываем чего хотим, если обращается проверенный поисковик
function spiders() {
   header("HTTP/1.1 301 Moved Permanently");
   header("Location: https://domain.new". $_SERVER["REQUEST_URI"]);
   exit();
}

// прописываем чего хотим, если - не поисковик
function no() {
   header("HTTP/1.1 403 Forbidden");
   echo "Account suspended for non-payment.";
   exit();
}


// запоминаем юзерагент
$ua = $_SERVER["HTTP_USER_AGENT"];
// если юзерагент есть и соответствует боту поисковика, то
if (isset($ua) && preg_match('/googlebot|-google|yandex|Mozilla|bingbot/si',$ua)) {
   
   // опеределяем айпи
   $ip = $_SERVER['REMOTE_ADDR'];
   $ipfile = file('ip.txt', FILE_IGNORE_NEW_LINES);
   $banfile = file('ban.txt', FILE_IGNORE_NEW_LINES);
      // если мы уже проверяли и знаем этот айпи, как поисковика, то выполняем задачу
      if (in_array($ip, $ipfile)) {
         spiders();
      }
      // если знаем этот айпи, как самозванца, то выполняем заглушку
      elseif (in_array($ip, $banfile)) {
         no();
      }
      // иначе проверим хост этого кадра https://support.google.com/webmasters/answer/80553?hl=ru
      else {
         $hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);
         // если хост опознаем, как поисковика, то запишем ("для прикола" (С)) его и, что важнее, запишем его ip, чтоб не проверять в следующий раз + выполним задачу
         if (preg_match('/(googlebot\.com|google\.com|yandex\.(ru|com|net|)|msn\.com|mail\.ru|paranoik\.org)$/si',$hostname)) {
            file_put_contents('hostname.txt', $hostname . PHP_EOL, FILE_APPEND);
            file_put_contents('ip.txt', $ip . PHP_EOL, FILE_APPEND);
            spiders();
         }
         // если кадр лишь маскируется под поисковик - запишем его айпи
         else {
            file_put_contents('ban.txt', $ip . PHP_EOL, FILE_APPEND);
            no();
         }
      }
}
else no();

?>


"|Mozilla" и "|paranoik\.org" тут для того, чтоб протестировать на себе, в конечном файле - удалить.
Даже не поленился комментов наделать, чтоб доступно всем было icon_cool.gif

Тут важна проверка ботов по host, ибо юзерагент подделают, а списки айпишников поисковиков актуальных не бывает.



Топик для таких же, кто не нагуглит решения, для какой бы цели оно не было +

Покритикуйте? Интересует не в плане красоты/оптимальности (что не исключается, конечно), а если чего как не учел.. Например, находил, что gethostbyaddr() будет тормозить, если регулярно задействовать, потому прописал, чтоб проверенные айпишники в файл записывалиьсь...
цитата
20/11/18 в 08:05
 Naemnick
Смотри тему. Яндекс. Запрос "проститутки" =213. Там народ отлично с этим справился с помощью под доменов. В выдаче один домен а по факту поддомен. Найдёшь ответ расскажи.
цитата
27/01/21 в 05:11
 banderas
Может кто знает как средиректить всех, кроме поисковых ботов?
Ботам показать страничку, остальных средиректить.
цитата
27/01/21 в 07:37
 Alexs
RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} googlebot|yahoobot|microsoftbot [NC]
Redirect 301 / http://www.somesite.com/

как то так
цитата
27/01/21 в 14:38
 banderas


Спасибо! А с проверкой по ИП не обязательно? Может на пхп есть что то более сложное, но понадежнее чтобы точно бота не средиректило?

Задача средиректить сюрферов, но ботам показывать номальную страничку.
цитата
27/01/21 в 15:19
 xjam
Текст этого сообщения доступен только зарегистрированным пользователям.
цитата
27/01/21 в 16:08
 banderas
xjam писал:
Скрипт, который определяет бота по айпи и делает обратный реверс для проверки ип тоже, более-менее надежно, свой, дарю.

функция checkBot вернет ОК если это не бот, имя бота если это бот, ну и FAILED если кто-то просто подменил юзер-агент на гуглбота,
там не все боты а самые основные так что добавишь свои, шли обратно буду рад дополнить


Круто!

Из недостающих ботов я так понимаю остаються:
Googlebot-Image
Googlebot-Video
yahoobot
microsoftbot
Slurp - (Slurp Bot)
DuckDuckBot
ia_archiver

И с учетом моих 0,00015 знаний в пхп, что надо добавить чтобы если не бот то редиректило простого юзера на указанный урл?
цитата
29/01/21 в 00:13
 xjam
Текст этого сообщения доступен только зарегистрированным пользователям.

Последний раз редактировалось: xjam (30/01/21 в 11:11), всего редактировалось 1 раз
цитата
29/01/21 в 00:25
 xjam
checkKillBadBot функция для проверки бота на подделку, если нужно еще по именам пропускать ботов, как утку, то делаем так



function gobot()
{
    //тут твой редирект для бота
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: https://domain.new" . $_SERVER["REQUEST_URI"]);
    exit();
}

//проверяем основныйх ботов
$botStatus = checkKillBadBot();
if (!in_array($botStatus, ['FAILED', 'OK'])) {
    gobot();
}

//проеряем воторстепенных уже без верификации по-айпи, если  нужно, новый юзер-агент добляешь просто разделитеелем | (без пробелов и черточек)
if (preg_match('/DuckDuckBot|Slurp|msnbot/i', $_SERVER['HTTP_USER_AGENT'])) {
    gobot();
}


.. тут дальше продолжение сайта если юзер или ненужный бот.
цитата
29/01/21 в 16:15
 banderas
По итогу xjam очень помог разобраться. Респектос smail54.gif
цитата
29/01/21 в 16:48
 Bongo
ммм, а вот интересно, ркн использует ботов для чека доменов? допустим, тогда зачем ботов поисковиков редиректить\нередиректить? или если смотрят глазами, то как они увидят что-то иное, не то, что по задумке реальные юзеры должны видеть icon_rolleyes.gif
цитата
29/01/21 в 23:57
 xjam
Текст этого сообщения доступен только зарегистрированным пользователям.

Последний раз редактировалось: xjam (30/01/21 в 11:11), всего редактировалось 1 раз
цитата
30/01/21 в 10:49
 Bongo
xjam: ну тут какбы логично... я просто не вкурил мысль тс-а про редирект только поисковых ботов, в чем смысл если через какое-то время новый домен вылезет в топ то его аналогично пришибут без этой мышиной возни со скриптами, и в чем обратная мысль бандераса- средиректить с домена всех кроме ботов, т.е. есть домен с кучей трафа который надо отсеять или что?
цитата
30/01/21 в 11:10
 xjam
Текст этого сообщения доступен только зарегистрированным пользователям.
цитата
30/01/21 в 11:31
 Bongo
xjam: нечто подобное xurl делал, а потом написал в личке что закончил с адалтом, прибил сервак со всеми доменами и больше на связь не выходил... а там интересные доменчики были под ркном, на них только-только гугл начал наливать...
лично я считаю так- ну забанит и забанит, не велика беда, кому надо тот под впном зайдет, тем более народ ща грамотный, ну и никто же не запрещает в описалово или тайтл воткнуть юзай впн чтоб посмотреть отменную нуху icon_razz.gif


Эта страница в полной версии