Верстая шаблон для блога Desian.ru, я поставил себе цель – попытаться соорудить валидный html код. Поначалу все шло очень гладко, но стоило мне заключить кусочек кода в тег noindex, так валидатор тут же выдавал ошибку.

Покопавшись в сети я впервые узнал, что тега <noindex> в спецификации HTML просто нет. Его используют исключительно чтобы подмоститься нашему Яндексу.
Ну не любит Яша делать как у всех, у того же Гугла есть атрибут ссылок rel=”nofollow”, который, впрочем, применим только к ссылкам.

Как же скрыть от пристального взгляда Яндекса кусок HTML-кода соблюдая валидность?

Решение, как всегда, идет через задний проход, с применением альтернативного синтаксиса CDATA.

Синтаксис CDATA (character data, символьные данные)

<![CDATA[
Обрабатываемые символы
]]>

Все что помещено между <![CDATA[ и ]]> обрабатывается не как разметка, а как простой набор символов. Что, впрочем, не мешает боту Яши увидеть в нем разметку.

Что получаем:

<span class=”no”><![CDATA[<noindex>]]></span>
то, что необходимо запретить индексировать Яндексу
<span class=”no”><![CDATA[</noindex>]]></span>

<span class=”no”>…</span> - этот тег, собственно, необходим исключительно для скрытия от глаз пользователя набора символов внутри CDATA, ибо браузер выдает код <noindex> как символы, а не интерпритирует как тег. Скрытию способствует класс стилей для <span>:

span.no {display: none}

Ну вот и все. Код валидный, все довольны.
PS: атрибут ссылок rel=”nofollow” – валидный и с ним нет никаких заморочек.