Для оптимизации релевантности данных на сайтах бывает нужно скрывать часть контента от роботов поисковых систем. Способов сделать это достаточно много, но в данной заметке я покажу как скрыть контент с помощью загрузки данных через ajax и на реальном примере рассмотрим применение данного метода в CMS WordPress.
Для более удобного использования потребуется подключение библиотеки jQuery. Не буду останавливаться на этом, т.к. в поиске не сложно найти инструкцию.
Для начала рассмотрим принцип работы метода. Допустим на сайте есть простое меню:
<nav> <ul> <li><a href="#">Пункт 1</a></li> <li><a href="#">Пункт 2</a> <ul id="submenu"> <!-- Здесь будут выведены подпункты, скрытые от ПС --> </ul> </li> </ul> </nav>
В элементе ul с id=submenu нам нужно вывести подпункты, которые не увидят ПС. При просмотре кода сайта, используя данный метод, подпунктов там также не будет.
Разместим в нужном месте (или просто рядом с меню) данный код.
<script>
jQuery(function(){
jQuery.ajax({
url: "submenu.php",
dataType: "json",
success: function(data){
jQuery("#submenu").html(data.submenu);
}
});
});
</script>
Данный JS код подставит нужные нам подпункты из файла submenu.php (прописать свой путь, если файл лежит не в одной папке с файлом, в котором размещено меню).
Здесь хочу дать очень важное пояснение. Файл submenu.php обязательно должен быть размещен в папке, которая будет закрыта в robots.txt (Disallow: /folder/). При этом желательно создать и закрыть папку заблаговременно, чтобы роботы пометили у себя папку, как запрещенную к индексации.
Все что остается, создать файл и заполнить его нужными данными:
<? $html = ' <li>Подпункт 1</li> <li>Подпункт 2</li> <li>Подпункт 3</li> '; $data['submenu'] = $html; echo json_encode($data); ?>
Далее я покажу на реальном примере, как скрыть блоки с комментариями от индексации ПС в CMS WordPress через данный метод.
Скрытие комментариев WordPress

Сначала нам нужно подключить скрипт, для передачи ID поста, в котором нужно вывести блок с комментариями через ajax. В данном примере мы его подключим в файле single.php (шаблон детального просмотра поста).
<script> var send_post_id = <?php the_ID(); ?>; </script>
Теперь в переменной «send_post_id» на всех детальных страницах постов (запись типа post) храниться их id. Нужно подключить скрипт для передачи данного id в ajax обработчик wordpress. Если есть подключенный к шаблону файл со скриптами, то можно добавить код в него, либо создадим новый файл (назовем его hidden-comments.js) и положим его в корень темы в папку js (your-domain.ru/wp-content/themes/your-theme/js). Содержимое:
jQuery(document).ready(function($) {
var ajaxurl = '/wp-admin/admin-ajax.php'; // путь к обработчику wp
var data_reviews = {
'action': 'do_nav_reviews', // название функции
'spd': send_post_id // переменная с id записи
};
jQuery.ajax({
url: ajaxurl, // обработчик
data: data_reviews, // данные
type: 'POST', // тип запроса
success:function(data){
if(data) {
jQuery('article.post').after(data); // где выводить комментарии, проверьте у себя в шаблоне совпадение по ccs селектору
}
}
});
});
Остается создать функцию, с названием, указанным в ajax скрипте (передать данные в php функцию). Также, нам нужно подключить файл hidden-comments.js на всех страницах детального просмотра поста. Все это мы сделаем в главном файле функций темы WordPress «functions.php» (в конце файла).
<?php
/* Подключение ajax скрипта hidden-comments.js */
add_action( 'wp_enqueue_scripts', 'hidden_comments_scripts' );
function hidden_comments_scripts() {
if( is_single() ){
wp_enqueue_script( 'hidden-comments', get_stylesheet_directory_uri() .'/js/hidden-comments.js', array( 'jquery' ), '1.0', true );
}
}
/* Вывод комментариев */
add_action('wp_ajax_do_nav_reviews', 'do_nav_reviews');
add_action('wp_ajax_nopriv_do_nav_reviews', 'do_nav_reviews'); /* для неавторизованных пользователей */
function do_nav_reviews(){
$p_id = ( $_POST['spd'] );
/* задаем нужные нам критерии выборки данных из БД */
$args = array(
'posts_per_page' = > -1, /* все комментарии на одной странице */
'p' = > $p_id /* id поста */
);
/* создаем экземпляр */
$my_query = new WP_Query($args);
/* Цикл */
while ( $my_query->have_posts() ) {
$my_query->the_post();
global $withcomments;
$withcomments = true;
comments_template();
}
wp_die();
}
?>
Теперь все комментарии будут отсутствовать в коде странице, а соответственно робот ПС их не увидит, но как уже писал выше, папки с ajax скриптами должны быть закрыты от индекса, при чем заблаговременно.