В WordPress обнаруживается не мало артефактов маршрутизации, которые создают головную боль SEO-специалистам. Я уже рассказывал на днях о страницах вложений. А сегодня расскажу ещё об одном случае.
Попробуйте на вашем блоге под WP добавить к адресу публикации или страницы после слэша любое целое число.
К примеру, к адресу одной из статей на shra.ru
1 |
shra.ru/2017/01/razbit-slovo-na-bukvy-v-php/ |
Добавим /1000
1 |
shra.ru/2017/01/razbit-slovo-na-bukvy-v-php/1000 |
Что ожидается? Я считал, что WP покажет страницу 404. Но нет, он показывает ту же самую страницу, возвращая код 200. Если бы не каноническая ссылка в заголовке HTML, то мы бы имели дубль страницы. Вернее, неограниченное число дублей.
1 |
<link rel="canonical" href="//shra.ru/2017/01/otklyuchenie-stranicy-vlozheniya-v-wordpress/" /> |
Что делать, если такие дубли каким то образом попали в индекс поисковой машины?
Возвращаем HTTP код 404 для дублей
Смысл в том, чтобы при обращении к неканоническому адресу страницы ответить 404 кодом.
Я реализовал зацепку к template_redirect и использовал All in One SeoPack плагин для получения канонического адреса страницы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
add_action( 'template_redirect', function() { global $wp_query, $aiosp; if (!empty($aiosp)) { //получим каноническую ссылку //я просто взял кусок из модуля AIOS $url = ''; if ( ! empty( $aioseop_options['aiosp_customize_canonical_links'] ) && !empty( $opts['aiosp_custom_link'] ) ) { $url = $opts['aiosp_custom_link']; } if ( empty( $url ) ) { $url = $aiosp->aiosp_mrt_get_url( $wp_query, $show_page ); } $url = $aiosp->validate_url_scheme( $url ); $url = apply_filters( 'aioseop_canonical_url', $url ); //здесь я проверяю, что ссылка отличается от канонической, //имеет вид - url/%целое число% //и это не случай "пагинации" if ( ! empty($url) && ($canonical = parse_url($url)) && !preg_match('#/page/[\d]+/?$#ismu', $_SERVER['REQUEST_URI'])) { list($requestred) = explode('?', $_SERVER['REQUEST_URI']); //остаётся выдать страницу с кодом 404 if ($requestred != $canonical['path']) { header("Status: 404 Not Found"); $wp_query->set_404(); status_header(404); nocache_headers(); } } } } ); |
Ситуация с такими дублями весьма редкая. Остается не выясненным, почему WP обрабатывает данные адреса, не выбрасывая 404 страницу? Может у вас есть ответ? :)
Забавно читая сию полезную статью видеть в адресе блога автора мусорные якоря: musornye-stranicy-v-wordpress/#axzz4XQ4Oob00
Или в этой белиберде есть тайный смысл?
В этой белиберде конечно же есть смысл. Якоря эти не попадают в индекс, т.к. канонические адреса сформированы для каждой страницы сайта, а служат они для корректной работы tynt скрипта, которым и формируются. Этот якорь что то вроде хеш кода.