nickspringВалидный <noindex>!

  25.01.2007, nickspring

Наконец-то я придумал способ записать <noindex> так, чтобы валидатор не ругался. Как известно, в XHTML существует возможность указать секцию CDATA, в которой можно писать всё, что душе угодно. Другое дело, что разные браузеры по разному обрабатывают эту секцию, что долгое время останавливало от использования noindex на проектах студии, поскольку у нас из всех правил есть одно строгое: все наши сайты должны проходить валидацию. Сегодня мучал в очередной раз свою подопытную страницу, пока не дошло, что всё очень просто (очередное спасибо, кстати, Жене Летову, за то, что в своё время дал ссылку на плагин FF, валидирующий на лету код / кстати, он даже строже стандартного валидатора W3C / это очень сильно экономит время).

Вот, что у меня вышло:

<span class="inv"><![CDATA[<noindex>]]></span>
То, что запрещено к индексации
<span class="inv"><![CDATA[</noindex>]]></span>

Где CSS-класс «inv»:

.inv {display:none}

UPD: проверено, метод работает!

Добавить в  google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Комментарии (24) к статье "Валидный <noindex>!"

  1. sEoK (nic2006) пишет:

  2. nickspring пишет:

    Эксперимент запущен. О результатах сообщу.

    2Yandex-Team: знаю по логам, что иногда читаете блог . Если описанный выше метод работает, очень прошу не менять ситуацию, ведь это не нарушает лицензии поисковой системы "Яндекс" .

  3. letov пишет:

    Yo, Коля!

    ps: а почему бы ему нарушать, если бот не видит, а пользователь видит аки java? (но не наоборот)

  4. Леонид пишет:

    Классно. Можно ещё и ссылку на плагин ФФ, валидирующий код?

  5. nickspring пишет:

    http://users.skynet.be/mgueury/mozilla/

  6. Arty V пишет:

    Отлично! Мегоинтересны результаты эксперимента.
    Можно будет потом еще на бегуне проверить

  7. Arty V пишет:

    Повторюсь:
    Можно будет потом еще на бегуне проверить &ltindex&gt

    думал преобразует в сущности, а нет(

  8. Arty V пишет:

    Блин((( забыл точку с запятой

  9. nickspring пишет:

    Да, забавно у WP - нужно делать ручками htmlspecialchars() :-)

  10. nickspring пишет:

    Быстроробот, что и ожидалось, ссылку съел (ему всегда было начхать на любой noindex).

  11. iAdramelk пишет:

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

    1. Семантика едет к чертям.
    2. Код увеличивается в размерах.
    3. Ни одному браузеру и ни одному пользователю это не надо.

    Единственно что даёт его использование — это зелёная галочка в валидаторе, который на этой странице никто кроме автора кода запускать скорее всего не будет, да и тот запустит всего пару раз.

  12. nickspring пишет:

    1. Не довод. Обоснуйте. span - не несет никакой семантики по определению, CDATA - секция произвольных текстовых данных, а noindex - эти данные. Какие черти едут и куда???

    2. Не довод. Дык давайте alt’ы к картинам убьем, сократим код дай божи ? В принципе, валидность и стандарты никому не интересны, можно еще DOCTYPE убрать, да и в quirk-mode можно теги не закрывать… и т. п.

    3. Не довод. iAdramelk, у Вас, действительно, наверное сильна внутренняя вредность, раз Вы не разобравшись в предназначении тега NOINDEX говорите о браузерах и пользователях (к слову, валидность, как таковая, не тревожит их тоже).

    КРОМЕ ТОГО, ЗАМЕТЬТЕ ЧТО КАК БЫ ТАМ Н

  13. nickspring пишет:

    А зеленая галочка поднимает мне настроение .

  14. iAdramelk пишет:

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

    К сожалению далеко не всегда при существующих стандартах это возможно, из-за чего появляются всякие костыли, такие как: таблицы для разметки, вложенные друг в друга div’ы используемые из-за того что пока на один элемент можно поставить только один background и другие. Но их ещё можно как-то оправдать, так как их наличие/отсутствие влияет на внешний вид страницы (Хотя даже этого можно избежать вынеся подстановку декоративных тегов, аттрибутов и нод в отдельный яваскрипт). В данном же случае, эта конструкция не является необходимой, так как и в её отсутствие или присутствие на работе кода никак не сказывается. Поэтому я и считаю что её наличие в данном случае противоречит семантике документа. (То что span по спецификации не несёт ясно обозначенной семантики, совсем не значит что элемент вокруг которого он стоит не должен ей обладать. Cемантикой обладает любой элемент, span же как и div просто используется для добавления семантики элементам, для которых нет специальных тегов).

    2. А alt-ы несут смысловую нагрузку, они объясняют значения картинок для тех пользователей у которых изображения выключены, либо для пользователей альтернативных браузеров. Если же у картинки нет смысла, который бы стоило записать в альт, то скорее всего и картинки тут быть не должно.

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

    4. Какие последствия у данного грубейшего нарушения для разработчика, браузера или пользователя?

    P. S. Зелёная галочка конечно хорошо и мне тоже поднимает настроения, но не такой ценой.

    P. P. S. Когда я года два назад был ярым сторонником валидации и пытался склонить к сему делу окружающих, то мне показали забавный пример: Взяли html-файл сгенерированный Word’ом из текстового документа (Который, понятное дело, выдавал при валидации несколько сотен ошибок) и сделали примерно тот же трюк что и в вышеприведённом примере, а именно поставили открывающую CDATA в самом начале документа, почти сразу после тега html и в самом конце закрыли. После такой операции абсолютно любой документ с правильно проставленным доктайпом начал спокойно проходить валидацию без ошибок, даже самые страшные и неправильные. Понятное дело что валиднее они от этого не становились, работа их никак не изменялась, зато галочка стояла. Валидатором я пользоваться конечно не перестал, но с тех пор я ценность его галочки для меня очень резко упала.

    Данный пример на самом деле чем-то сильно похож предмет спора: По сути говоря код никак не изменился, тег noindex как был так и остался, и все как знали что он не входит в DTD, так и знают, зато валидатор мы обманули. А смысл?

  15. nickspring пишет:

    1.

  16. Andre пишет:

    Утрировано, но все же:

    if ($is_search_robot) {
    echo ’string string string’;
    }

    Т.е. показываем noindex только для роботов-индексаторов.
    Список роботов наити не трудно. Нетрудно найти так же и класс, который определяет, робот это или нет (видел что-то подобное на phpclasses.org)

    Т.е. в идеале нужно просто вырезать таги noindex для всех, кроме роботов, роботам то пофиг на валидность разметки.

  17. nickspring пишет:

    В идеале да, а фактически — клоакинг.

  18. iAdramelk пишет:

    Что нам говорят про семантику Яндекс.словари:

    [cite][Общественные науки, языки программирования] Семантика - в программировании - система правил истолкования отдельных языковых конструкций. Семантика определяет смысловое значение предложений алгоритмического языка.

    [Общественные науки] Семантика - раздел языкознания и логики, исследующий проблемы, связанные со смыслом, значением и интерпретацией лексических единиц.

    греч.Semantikos - обозначающий[/cite]

    Отсюда нетрудно вывести значение семантики в гипертексте:

    Это набор правил описывающий как браузеру (неважно графическому, голосовому, брайля или принтеру) обрабатывать тот или иной элемент. Семантика задаётся при помощи деления текста на отдельные языковые конструкции при помощи тегов, а также задания правил для обработки этих тегов устройством ввода. Это могут быть как значения проставленные по умолчанию, так и установленные при помощи css, который славтехосподи предусматривает конструкции для работы со всеми вышеперечисленными устройствами. Учитывая что теги div и span как правило в коде находятся не просто так, а используются для выделения отдельных его фрагментов, которым в дальнейшем устанавливаются правила поведения, то я считаю их вполне семантическими.

    Если Вы не согласны с данным определением семантики применительно к гипертексту, мне бы хотелось узнать Ваше определение.

    P. S. Для меня критерием качества вёрстки является то, что каждый элемент кода несёт под собой смысл. Если единственная цель существования кода — спрятать от валидатора какие-то фрагменты кода, которых по стандарту там быть не должно, то смысла я в этом найти не могу. Если этот фрагмент нужен для каких-то целей, то используйте его без лишних костылей. Если Вам не нравится видеть, что валидатор выдаёт ошибки, то не используйте их совсем. Как вариант, чтобы избежать клоакинга, но получить галочку, можно при передаче кода валидатору, через PHP вырезать всех вхождения этого тега, если кому-то от этого спокойнее. А в таком виде как сейчас это сильно напоминает продающиеся на рынке наклейки Версаче. Конечно можно на куртку такую наклейку наклеить и все будут видеть, что на ней написано Версаче, но лучше она от этого не станет.

  19. nickspring пишет:

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

    Вам не кажется, что Вы путаете спецификацию (DTD) с семантикой?

    Как Вы сказали, семантика - система правил _истолкований_, а не интерпретации браузером или другим устройством вывода (для этого есть DTD). Т. е, например:

    "P" истолковывается как "параграф", хотя браузер этого не знает. Он знает лишь то, как это выводить. Заметьте, что тоже самое можно вывести браузеру, используя "DIV", но истолкование, о котором браузер понятия не имеет, у этих элементов разное. Т.е. семантичность понимает человек, но не понимает машина.

    Согласен с тем, что "DIV" - имеет свое истолкование (семантику) - это отдельный блок данных. Какое же предназначение (логическое истолкование) Вы видите у "SPAN"?

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

  20. iAdramelk пишет:

    Так. По-порядку.

    Сначала был SGML и это было в чем-то хорошо. Целью создания SGML была именно семантическая разметка документов, для дальнейшей работы с ними машинным образом. То есть семантика документов изначально была направлена на обработку документов машинами, а не людьми.

    В SGML, как и XML сейчас, предустановленных тэгов не было. Автор сам решал какой тег что обозначает, какие между ними отношения и как устройства ввода должны с ними работать. Система эта была очень громоздкая, запутаная и далёкая от простых смертных.

    Когда Тим Бернес-Ли создавал интернет ему нужен был язык семантической разметки наподобие SGML, но последний как я уже писал для простых смертных был слишком сложен. Поэтому было решено сделать упрощённую версию этого языка из которой убрали ту часть которая отвечала за создание новых тегов и способы их отображения. Оставили только сами теги, причём только конкретные заранее утверждённые теги с заранее оговорённым смыслом и договорились:

  21. nickspring пишет:

    Написал ответ на полэкрана, потом решил что промолчу :-D.

  22. letov пишет:

    Ниасилил, многа букав.

  23. karmatsky пишет:

    letov

    +плюсодин

    Похоже очередное месиво по верстке затеяли. Кажется, надо срочно с семинарами определяться по верстке.

  24. nickspring пишет:

    Короче тему закрываю, метод после сегодняшнего апа проверен. Он работает.