Скрываем текстовые блоки и ссылки от поисковых систем

hidecat

Сегодня мы расскажем о способе скрытия текстовых блоков и ссылок от поисковых систем. Метод работает с динамическим содержимым и прост для внедрения. Подход не новый, кто-то его уже использует.

Суть метода: Мы перемещаем скрываемый контент в атрибуты тегов, которые не понимают поисковые системы. Далее, при помощи JavaScript, перемещаем скрытый контент из наших атрибутов обратно. Для этого используются HTML5 атрибуты data-*.

Пример 1. Скрываем текстовый блок:

Было Стало
<div>Спасибо, Ваш заказ создан.</div> <div data-innerhtml="Спасибо, Ваш заказ создан."></div>

 

Пример 2. Скрываем внутреннюю ссылку:

Было Стало
<a href="http://site.ru/">Главная</a> <a data-href="http://site.ru/">Главная</a>

(получается «безатрибутная» ссылка)

 

Пример 3. Скрываем внутреннюю ссылку и её текст:

Было Стало
<a href="http://site.ru/">Главная</a> <a data-href="http://site.ru/" data-innerhtml="Главная"></a>

 

Вот JavaScript, которым происходит замена:

function func_replace_seo_attr() {
	// Перебираем все теги с атрибутом data-innerhtml= и перемещаем содержимое этого атрибута в тело тега:
	$('*[data-innerhtml]').each(function() {
		$(this).html(func_htmlspecialchars_decode($(this).attr('data-innerhtml'))).removeAttr('data-innerhtml');
	});
	// Перебираем все ссылки с атрибутом data-href= и перемещаем содержимое этого атрибута в атрибут href=:
	$('a[data-href]').each(function() {
		$(this).attr('href', $(this).attr('data-href')).removeAttr('data-href');
	});
}

	// Заменяем html сущности на символы html
function func_htmlspecialchars_decode(string) {
	return string.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, '\'');
}

	// Раз в пол секунды вызываем функцию замены атрибутов
setInterval(function() {
	func_replace_seo_attr();
}, 500);

 

Весь переносимый в атрибуты контент должен быть преобразован на уровне сервера в HTML-сущности чтобы избежать ошибок валидации (например, при помощи PHP-функции htmlspecialchars). В приведённом коде есть функция обратной замены HTML-сущностей на символы.

Функция setInterval используется для повторной замены при изменениях в динамических элементах страницы.

Есть различные аспекты использования данного метода. Например, JavaScript-обработчики привязываются после загрузки документа. А нам надо это сделать ДО загрузки. Поэтому поместить этот код надо в самый низ документа (например, перед </body>).

 

Используя такой метод скрытия от индексации текстов и ссылок, мы решаем две основные задачи:

  • Избегаем использование атрибута rel="nofollow" для ссылок. Представители Google не рекомендуют использовать rel="nofollow" для перераспределения PageRank;
  • Избегаем использование <noindex> и <!––noindex––> для текстовых блоков. Этот метод нас не устраивает из-за того, что его не учитывает поисковая система Google.

P.S. Если у вас паранойя и вы уверены, что этого не достаточно для скрытия от индексации ссылки или текста, то можете дополнительно закодировать содержимое атрибутов. Например, при помощи base64.

ruslan

 
Руслан Халиулин
Веб-программист