Полезные мелочи для продвижения

GoRSS
На сайте с 29.07.2013
Offline
138
910

Периодически буду закидывать полезные функции и куски кода для SEO.

1. Фильтрация ботов.

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

	$bad=file_get_contents('http://joysea.ru/bad.txt'); $bad=explode(',',$bad);
for ($i=0;$i<count($bad);$i++) {
if (substr_count($_SERVER['HTTP_USER_AGENT'],$bad[$i])>0) {echo 'Please leave my server forever and fuck yourself.';exit();}
}

Сперва забираем перечень ботов, потом в цикле проверяем, есть ли совпадение. Если да, выводим сообщение и останавливаем генерацию страницы. Если файл по ссылке недоступен, вот его содержимое, вставляется именно так:

LinkpadBot,checkmarknetwork,BLEXBot,SemrushBot,AhrefsBot,DotBot,MJ12bot,linkdexbot

В инете можно найти куда большие списки, но здесь именно те, которые идут на сайты и перегружать список смысла не было.

https://commersoft.ru - софт: Google Indexing [индексация в Гугле по API] - Webcontrol [мониторинг сайтов и доменов]
[Удален]
#1

Развивайте тему, думаю многим будет полезно

splish
На сайте с 25.01.2011
Offline
114
#2
GoRSS:
Периодически буду закидывать полезные функции и куски кода для SEO.

Для кого? Если для других, то с таким кодом как в первом скрипте - не нужно!

count внутри цикла... Да еще и с чужого сервера.

Кроме того для этой задачи лучшее решение это .htaccess

GoRSS
На сайте с 29.07.2013
Offline
138
#3
splish:

count внутри цикла...

Что не так?

splish:

Кроме того для этой задачи лучшее решение это .htaccess

Конкретно для этой задачи не лучшее. Написал же, использую для десятка сайтов сразу. Править в 10 .htaccess'ах или в одном перечне? (txt-файле)

splish:

Да еще и с чужого сервера.

Так положите на своём :)

splish
На сайте с 25.01.2011
Offline
114
#4

count($bad) можно выполнить всего лишь 1 раз

.htaccess выполнит эту задачу намного быстрей.

А если сервер с файлом упадёт?

WP_Expert
На сайте с 19.11.2018
Offline
15
#5

От парсеров данная конструкция не спасет, но может создать проблемы нормальным ботам и возникнет проблема с индексацией страниц 😕

⭐ Создание лендингов и многостраничных сайтов на WordPress ⭐ Любые работы по Wordpress - написать (https://t.me/wpexpert) ⭐ Сайты под Adsense на заказ
GoRSS
На сайте с 29.07.2013
Offline
138
#6
splish:
count($bad) можно выполнить всего лишь 1 раз

Ок.

$bad=file_get_contents('http://joysea.ru/bad.txt'); // Забираем файл, содержание которого представляет из себя слова через запятую
$bad=explode(',',$bad); // разбиваем по запятым, получаем массив слов
for ($i=0;$i<count($bad);$i++) { // циклом обращаемся к каждому слову по-очереди
if (substr_count($_SERVER['HTTP_USER_AGENT'],$bad[$i])>0) {echo 'Please leave my server forever and fuck yourself.';exit();} // проверяем вхождение слова из массива в строку, содержащую информацию о реферере. Если есть, стопорим.
}

Если же вы подразумеваете, что надо до запуска цикла переменной присвоить количество массива $bad, а потом уже эту переменную использовать в цикле, то аргументируйте, плиз, для моего просвещения.

.htaccess выполнит эту задачу намного быстрей.

Еще раз пишу, для 10 сайтов надо вносить правки в 10 файлов htaccess, а при данном подходе лишь в одном файле.

А если сервер с файлом упадёт?

У меня VPS и все сайты лежат на одном сервере.

P.S.: с моего сервера не надо использовать, размещайте на своём.

---------- Добавлено 26.11.2018 в 19:13 ----------

WP_Expert:
От парсеров данная конструкция не спасет, но может создать проблемы нормальным ботам и возникнет проблема с индексацией страниц 😕

Не, цель именно нагрузку снизить. Ahrefs зашел и погнал тысячами новый сайт листить, а у меня там ~ 600k страниц, в итоге на других сайтах пошли тормоза. Или еще один, не помню какой конкретно, что-то из ссылочного, пошел сканировать с интервалом не более секунды, отсюда и текст до exit'a.

UPD: неправильно понял вашу реплику. Значит как это работает: рефереры логируются, потом я их просматриваю. Когда идут подряд запросы от одного типа бота, я ищу о нем информацию и решаю, блокировать ли. Нормальным ботам это создаст помехи, если внести их в black list.

KK
На сайте с 06.03.2014
Offline
47
#7
GoRSS:
Если же вы подразумеваете, что надо до запуска цикла переменной присвоить количество массива $bad, а потом уже эту переменную использовать в цикле, то аргументируйте, плиз, для моего просвещения.

Думаю, что речь о том, что сейчас количество слов вычисляется на каждой итерации.

Можно сделать это перед началом цикла один раз. Небольшая оптимизация. :)


$bad = file_get_contents('http://joysea.ru/bad.txt');
$bad = explode(',' ,$bad);
$bad_count = count($bad);

for ($i=0; $i<$bad_count; $i++) {
if (substr_count($_SERVER['HTTP_USER_AGENT'],$bad[$i]) > 0) {
echo 'Please leave my server forever and fuck yourself.';
exit();
}
}
Апокалипсис
На сайте с 02.11.2008
Offline
391
#8

Не используйте for там, где это не нужно. Есть foreach.

Записки нищего (http://zapiskinishego.ru) - мой личный блог Услуги php программиста. Очень нужна любая работа. Не покупают? Поведенческий аудит интернет-магазина за 5000 руб. (/ru/forum/990312)
KK
На сайте с 06.03.2014
Offline
47
#9

Тогда, наверное, можно и без foreach решить.


$bad = file_get_contents('http://joysea.ru/bad.txt');
$bad = explode(',' ,$bad);
if (in_array($_SERVER['HTTP_USER_AGENT'], $bad)) {
exit('Please leave my server forever and fuck yourself.');
}
S
На сайте с 30.09.2016
Offline
469
#10
GoRSS:
substr_count

Не надо там ничего считать. Достаточно substr().

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий