Бесконечное множество дублей страниц сайта на WP

Z
На сайте с 21.05.2016
Offline
8
1301

Забавная ситуация. Если к URL страницы сайта работающего под CMS WordPress в конце дописать через слеш любую последовательность цифр, то такая ссылка будет отдавать код 200 и работать точно так же, как основная ссылка.

Таким образом фактически каждая страница такого сайта имеет бесконечное количество дублей.

Заходим на Телдери, берем первый попавшийся сайт и проверяем:

http://rockstargame.ru/news/newsrockstargames/8-igr-kotorye-mozhno-zhdat-ot-rockstar-games-v-blizhajshem-budushhem/

http://rockstargame.ru/news/newsrockstargames/8-igr-kotorye-mozhno-zhdat-ot-rockstar-games-v-blizhajshem-budushhem/1234

http://rockstargame.ru/news/newsrockstargames/8-igr-kotorye-mozhno-zhdat-ot-rockstar-games-v-blizhajshem-budushhem/243467686754234657890987654

Казалось бы ничего страшного. Забить да и жить дальше. Но не тут то было.

Ситуация на одном из моих сайтов. Вчера обнаружил в списке загруженных Яндексом страниц у одной из них >11тыс. дублей, у другой - >1.3тыс дублей. Все добросовестно отдают код 200. Страницы, как и положено, вылетели из индекса. Одна из них давала >7тыс. уников в сутки. После чего, собственно, и начал разбираться.

Судя по всему, страницы были загнаны в индекс пингбэками некими экспериментаторами-доброжелателями.

Пингбыки отключил, но этим базу Яндекса уже не поправить.

Мнение - данная ситуация - явный баг. Страницы с приписанными к URLам цифрами должны отдавать код 404, но никак не 200. В таком случае будет невозможно будет эксплуатировать данный баг в целях выбивания из индекса похожих страниц конкурентов.

Две просьбы к Гуру.

Первая. Прошу раскритиковать мои выводы по ситуации.

Вторая. Научите, как исправить баг? Как для удлинненных ссылок получить код ответа -- 404?

R
На сайте с 19.01.2016
Offline
4
#1

Это для пагинации вроде предназначено, я убирал добавляя такой код в functions.php:


add_action( 'template_redirect', 'sy_template_redirect', 0 );
function sy_template_redirect()
{
if( is_singular() )
{
global $post, $page;
$num_pages = substr_count( $post->post_content, '<!--nextpage-->' ) + 1;
if( $page > $num_pages ){
include( get_template_directory() . '/404.php' );
exit;
}
}
}
Z
На сайте с 21.05.2016
Offline
8
#2

Спасибо. Сейчас добавлю.

А на пагинацию никак не повлияло?

R
На сайте с 19.01.2016
Offline
4
#3

Нет, оно делает "нерабочими" все варианты цифр в конце (я понял так), которые не отвечают за страницы.

МК
На сайте с 06.06.2014
Offline
26
#4
Ravager_:
Нет, оно делает "нерабочими" все варианты цифр в конце (я понял так), которые не отвечают за страницы.

Этот код отрицательно никак не скажется на сайте?

R
На сайте с 19.01.2016
Offline
4
#5

Макс Кокс, Код не мой, вот ссылка источника http://stackoverflow.com/questions/16179138/wordpress-url-end-with-a-number

Точно не могу сказать (ставил его на небольшой сайт но проблем не заметил)

МК
На сайте с 06.06.2014
Offline
26
#6

Ravager_, Ясо, спасибо.

C
На сайте с 20.04.2015
Offline
9
#7

Этот код делает примерно следующее:

function sy_template_redirect()

{
if( is_singular() ) //если страница является постом
{
global $post, $page;
$num_pages = substr_count( $post->post_content, '<!--nextpage-->' ) + 1; //подсчитать столько раз в посте встречается фраза "<!--nextpage-->" и записать это число в $num_pages
if( $page > $num_pages ){ //если номер текущей страницы (он записывается системой в $page) больше числа в $num_pages, совершить редирект на страницу 404.php)
include( get_template_directory() . '/404.php' );
exit;
}
}
}

🍿

МК
На сайте с 06.06.2014
Offline
26
#8

coderochek, Ну то есть все норм и можно использовать?

Z
На сайте с 21.05.2016
Offline
8
#9

Проверено. Все работает. Большое спасибо.

SeVlad
На сайте с 03.11.2008
Offline
1609
#10
zezalon:
Таким образом фактически каждая страница такого сайта имеет бесконечное количество дублей.

Не имеет, если не похерить каноникал.

zezalon:
http://rockstargame.ru/news/newsrockstargames/8-igr-kotorye-mozhno-zhdat-ot-rockstar-games-v-blizhajshem-budushhem/243467686754234657890987654

А тут я вижу 301.

ЗЫ. Конечно же, каноникал - это костыль и правильно отдавать 404 на несуществующие страницы (или 301 в подобных случаях), но в целом проблемы нет, если не нарушать логику ВП.

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.

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