Скрытие контента на сайте (на реальном примере в WordPress)

Для оптимизации релевантности данных на сайтах бывает нужно скрывать часть контента от роботов поисковых систем. Способов сделать это достаточно много, но в данной заметке я покажу как скрыть контент с помощью загрузки данных через 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

Скрытие комментариев 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 скриптами должны быть закрыты от индекса, при чем заблаговременно.

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *