О склеивании слов в ключевых фразах из-за ошибок в верстке

При наблюдении за распределением поисковых запросов по страницам входа на сайты, можно заметить один странный факт - некоторые страницы не находятся в поиске по словам, которые на этих страницах размещены. То есть, на странице существует текст с ключевым словом, но это слово почему-то «не видно» поисковой системе.

После проведения более детального анализа были выявлены те слова, которые на страницах присутствуют, но поисковыми системами не учитываются. Проверка показала, что слова эти написаны с ошибкой, однако ошибкой не явной (когда, например, между слов пропущен пробел), а ошибкой, связанной с версткой страницы.

Так, конструкция вида <strong>Оптимизация</strong><strong>сайтов</strong> приводит к тому, что страницу можно найти только по слову «оптимизациясайтов», и нельзя найти по фразе «оптимизация сайтов».

Для сайтов со сложной версткой, страницы которых содержат много блоков, проблема может быть достаточно серьезной. Судя по количеству найденных в поиске результатов по запросам вида «продажаквартир», «продажаавто» и т.д., подобная «склейка» слов является проблемой для большого количества сайтов.

В связи с этим было решено провести эксперимент и определить, какие HTML-теги с какими разделителями приводят к «склеиванию» рядом стоящих слов, а в каких случаях поисковые системы разделяют слова.

Цель эксперимента:

Определить последовательности HTML-разметки, которые затрудняют или делают невозможной правильную индексацию текста документа.

Проблематика:

Текст является ключевой составляющей для возможности поиска той или иной страницы в интернете, а наличие ошибок в тексте существенно затрудняет индексацию. И если с явными ошибками все понятно, и ПС научились их исправлять и учитывать при выдаче, то неявные ошибки, к каковыми и относится «склеивание» могут доставить кучу неприятностей.

«Склеивание» слов может быть связанно с их ошибочным написанием, с пропущенным пробелом между словами или между знаком препинания и следующим за ним словом, а также с ошибкой в разметке страницы. Как видно, примеров «склеенных» слов много:

Ошибки подобного типа можно разделить на две группы – естественные (опечатки) и системные (вызванные техническими особенностями разметки текста).

Мы обратили внимание, что одна часть тегов разметки однозначно разделяет слова фразы для поисковой системы, а другая часть не разделяет. Это знание некоторые используют для сокрытия от автоматических систем фильтрации слов-маячков – так называемая обфускация кода.

Какие же именно HTML-теги приводят к склеиванию слов? Логическим дополнением к эксперименту будет проверка последовательностей ( . , ? ! : ; \n \t & nbsp;) с разметкой, которые также приводят к склейке слов.

Эксперимент

Для проведения эксперимента были созданы тестовые страницы.

Фразы:

Были взяты наиболее частотные биграммы из Национального корпуса русского языка.

Теги разметки:

<address>, <blockquote>, <center>, <div>, <h1>, <h2>, <h3>, <h4>, <h5>, <h6>,

<ol>, <p>, <pre>, <table>, <ul>, <article>, <aside>, <footer>, <header>, <mark>, <menu>, <nav>, <section>, <time>, <a>, <abbr>, 
<acronym>, <b>, <basefont>, <big>, <br>, <cite>,

<code>, <dfn>, <em>, <font>, <i>, <kbd>, <q>, <s>, <samp>,

<small>, <span>, <strike>, <strong>, <sub>, <sup>, <tt>, <u>, <var>

Знаки разделители:

"!", "?", ",", ".", ":", ";", "\n", "\t", " " <& NBSP>;

Последовательности тегов

<tag>слово1</tag>[разделитель/пропуск пробела]<tag>слово2</tag>

<tag>слово1[разделитель/пропуск пробела]<tag>слово2</tag></tag>

Проверочные запросы

Yandex 

  • слово1слово2 url:страница 
  • слово1 слово2 url:страница

Google 

  • слово1слово2 inurl:страница 
  • слово1 слово2 inurl:страница

На начальном этапе использовались проверочные запросы без уточнения. Результаты наблюдений по ним были отнесены к не корректны, т.к. поисковые системы показывают результат в случаях частичного совпадения с искомым запросом.

Было принято решение использовать уточняющую формулировку в проверочных запросах к поисковым системам.

Yandex 

  • "слово1слово2" url:страница 
  • "слово1 слово2" url:страница

Google 

  • "слово1слово2" inurl:страница 
  • "слово1 слово2" inurl:страница

Выбранные для исследования теги относятся к следующим группам: 

  • Строчные 
  • Блочные 
  • HTML5 (понимаем, что блочные и строчные, но рассматриваются они отдельно)

Разделители можно группировать следующим образом: 

  • Пропущен пробел 
  • Знаки препинания 
  • Специальные разделители

Результат проведенного эксперимента:

  1. Индексация текста поисковыми системами в выделенных группах сходна, за некоторыми исключениями. 
  2. Индексация цепочек текста и тегов (вложенные, последовательные) одинакова.

Блочные элементы:

<address>, <blockquote>, <center>, <div>, <h1>, <h2>, <h3>, <h4>, <h5>, <h6>,

<ol>, <p>, <pre>, <table>, <ul>

Ошибка в разметке текста блочными элементами скрывает от поисковой системы фразу, взятую в кавычки. Нет результатов ни с пропуском пробела, ни со знаками препинания, ни с символами переноса строки, табуляция, неразрывный пробел.

При этом поисковые системы находят каждое отдельное слово фразы. Таким образом, можно сделать вывод о том, что блочные элементы делят слова, разделяя сам текст на блоки (пассажи). Каждое отдельное слово попадает в соседние блоки, поэтому они не находятся по строгим запросам, но видны поисковой машине по обычному запросу без кавычек.

HTML5:

<article>, <aside>, <footer>, <header>, <mark>, <menu>, <nav>, <section>, <time>

Все ошибки в тегах HTML5 для Google делают фразу в кавычках невидимой. Поисковая система не показала результата ни с одним вариантом размещения.

Yandex, в основном, относится к тегам HTML5 также, как и к блочным, за исключением <mark> и <time>

Пропуск пробела:

Yandex находит «слово1слово2», и не находит «слово1[пробел]слово2»

<mark>слово1</mark><mark>слово2</mark>

<mark>слово1<mark>слово2<mark></mark>

<time>слово1</time><time>слово2</time>

<time>слово1<time>слово2</time></time>

Знаки препинания: 

Yandex находит «слово1слово2», и при этом находит последовательность «слово1[знак препинания]слово2»

<mark>слово1</mark>[знак препинания]<mark>слово2</mark>

<mark>слово1[знак препинания]<mark>слово2<mark></mark>

<time>слово1</time>[знак препинания]<time>слово2</time>

<time>слово1[знак препинания]<time>слово2</time></time>

Специальные разделители:

Yandex НЕ находит «слово1слово2», и находит «слово1[пробел]слово2» .

<mark>слово1</mark>[разделитель]<mark>слово2</mark>

<mark>слово1[разделитель]<mark>слово2<mark></mark>

<time>слово1</time>[разделитель]<time>слово2</time><time>слово1[разделитель]<time>слово2</time></time>

Строчные элементы:

<a>, <abbr>, <acronym>, <b>, <basefont>, <big>, <br>, <cite>,

<code>, <dfn>, <em>, <font>, <i>, <kbd>, <q>, <s>, <samp>,

<small>, <span>, <strike>, <strong>, <sub>, <sup>, <tt>, <u>, <var>

Наибольшее количество различных вариантов индексации встречается именно на строчных элементах. Строчные элементы чаще всего используются для стилевого оформления текста, и именно они требуют повышенного внимания. 

  • Специальные разделители – однозначно разделяют слова. Поисковые системы находят «слово1[пробел]слово2» и не находят «слово1слово2». 
  • Знаки препинания позволяют найти «слово1[пробел]слово2» и последовательность «слово1[знак препинания]слово2».

Стоит сразу отметить, что к тегам <basefont>, <br> Google относится аналогично блочным. В силу особенностей назначения этих тегов, такое отношение можно считать оправданным.

Пропуск пробела:

Yandex: 

склеивает слова, находит «слово1слово2» и не находит «слово1[пробел]слово2», за исключением тега BR. Тег BR однозначно делит слова, Yandex находит «слово1[пробел]слово2» и не находит «слово1слово2».

Google:

Ошибки в разметке тегами - <a>, <abbr>, <acronym>, <cite>, <code>, <dfn>, <kbd>, <q>, <samp>, <span>, <sub>, <sup>, <var> – однозначно разделяют слова, Google находит «слово1[пробел]слово2» и не находит «слово1слово2»

Ошибки в разметке тегами - <b>, <big>, <em>, <font>, <i>, <s>, <small>, <strike>, <strong>, <tt>, <u> – приводят к склейке слов, Google находит «слово1слово2» и не находит «слово1[пробел]слово2».

Вывод:

Блочные элементы:

Эксперимент показал, что проблемы склейки слов на блочных элементах не существует, т.к. страницы находятся по нестрогим запросам.

HTML 5:

Необходимо использовать разделители для тегов <mark> и <time>, для предотвращения склейки слов. После знаков препинания в обязательном порядке должен быть пробел.

Строчные элементы:

Необходимо использовать разделители для предотвращения склейки слов. Неразрывный пробел для Yandex не является однозначным разделителем. После знаков препинания должен быть пробел.

Разделители:

Пробел, перенос строки, табуляция, 

Примечание:

После знаков препинания обязательно должен быть пробел. Большую значимость имеет пробел после точки, разделяющей предложения, если он пропущен, то для поисковой системы в пассаж войдут два предложения как одно.

Ошибка в HTML коде может быть ложкой дегтя в бочке меда.