Dubrowsky
Хроники одного дупла
Блогово  →  WebDev  → 

Валидный noindex средствами XSLT

06 Марта 2008 года

Народ в очередной раз задался вопросом, как бы так закрыть часть документа от индексации, чтоб при этом все было валидно? По мотивам статьи от Ayavryk'а сделал свой вариант.

В основе лежит ровно та же идея: отдаем на клиент документ, в котором контент, не предназначенный для индексации, спрятан в комментариях, а затем при помощи XSLT достаем его оттуда.

Основная засада заключается в том, что Mozilla Firefox не знает о disable-output-escaping, поэтому исходный метод переставал работать, если в контенте, который мы прячем, встречались вложенные теги. Собственно, эту проблему я решил черезвычайно тупо: дополнительным XSL-преобразованием на сервере.

Пусть у нас имеется (X)HTML-код, в котором некоторые блоки размечены старым добрым невалидным тегом noindex. Например, вот такой. На сервере мы должны заменить все текстовые узлы внутри noindex'ов на комментарии, а сами noindex'ы заменить на нормальные человеческие теги, каким-то образом отмеченные, чтоб на клиенте знать, что внутри них нужно обрабатывать комментарии. Я в качестве такого "маркера" использовал класс "noindex", а в качестве "человеческого тега" - div, либо если noindex[@type = 'inline'] - то span.

Собственно говоря, XSL-шаблон, через который прогоняется документ на сервере, выглядит вот так. На клиент приходит документ, в котором тег noindex заменен на div[@class = 'noindex'], а все текстовые узлы заменены на комментарии. Т.е. что-то в этом духе:

<div> Дорогой Яндекс! <div class="noindex"><!--Не индексируй меня! --><b><!--Пожа-а-а-алуйста!--></b></div> Вот этот кусок можно проиндексировать. А <span class="noindex"><!--вот этот, пожалуй, не стоит--></span>. </div>

Остается натравить на это безобразие еще один шаблон, уже на клиенте. Он совсем простой: он копирует все дерево, заменяя обратно комментарии на текстовые узлы внутри тегов с классом "noindex". disable-output-escaping я оставил для наглядности: если бы Фокс с ним дружил, можно было бы обойтись без преобразования на сервере.

Клиентский шаблон смотрим вот тут. А весь пример целиком можно потискать вот здесь. У меня оно заработало в FF2, IE6 и Opera 9. Однако, я эту методику на практике применять не планирую. Во-первых, подключается не везде легко. Во-вторых, нет у меня доверия XSLT на клиенте. Так что цель статьи - только показать идею, а реализовывать - пока рано.

Кстати. А вот кто-нибудь мне может сказать, как бы организовать подряд 2 преобразования, не используя JavaScript, и не городя огород на сервере? Я пытался из XSLT вставлять processisngInstruction xml-stylesheet со ссылкой на другой шаблон. Казалось бы, это логично. Но вот фиг, не работает и все тут, хотя например в спецухе Мозиллы написано, что должно. Кто-нибудь знает?

Ссылки по теме:
XHTML+XSLT=nofollow+noindex
- топик на серче про статью Ayavryk'а
Валидный <noindex>? Можно! - там же, nickspring пытался придумать хак, но вроде не преуспел.

Камменты

vashurin06.03.2008, 18:04#
Ну в той же теме от nickspring, я описал вариант валидного noindex через задание собственного !DOCTYPE: http://forum.searchengines.ru/showpost.php?p=1851676&postcount=122 . И мой пример прекрасно проходил валидацию на W3C.
Кстати. А вот кто-нибудь мне может сказать, как бы организовать подряд 2 преобразования, не используя JavaScript, и не городя огород на сервере ? Я пытался из XSLT вставлять processisngInstruction xml-stylesheet со ссылкой на другой шаблон. Казалось бы, это логично. Но вот фиг, не работает и все тут, хотя например в спецухе Мозиллы написано, что должно. Кто-нибудь знает?

А чем плох JS?
1. У большинства он подключен.
2. Я где-то прочитал, что тот же Яндекс не индексирует то, что находится внутри тега NOSCRIPT. Сказать однозначно так ли это не могу, поскольку уже очень далек от SEO (мне ближе точность, нежели бубен :P ). Но если это так, то засовываем текст, которой не надо индексировать с этот чудный тег. В результате, пользователи с отключенным JS видят текст. А тем, у кого JS включен, через innerHTML "дергаем" данный текст и опять через innerHTML добавляем на страницу. :)
Николай Дубровскийон самый06.03.2008, 21:50#
JS - это лишний код. В остальном - никаких проблем:)
Писать свой DTD - мне кажется, это порочная практика. Сегодня мы туда noindex добавим, а завтра захочется еще с десяток тэгов придумать :)

Про noscript - это вариант, но, опять же, нужно кодить дополнительный JS, либо использовать XSLT. Кстати, есть еще неиндексируемый тег marquee, но он тоже отсутствует в спецухе :)

Вообще, это все танцы с бубном. По-хорошему, надо давить на моск яндексоидам, чтоб они уже наконец переучили своего индексатора под какой-нибудь нормальный синтаксис.
ayavryk11.03.2008, 16:49#
Цепочки XSLT преобразования можно будет делать в XSLT2, но броузеры его будут понимать в лучшем случае лет через пять. Пока и XSLT полностью не поддерживают - спрятать текст можно, а вот фрагмент HTML - нельзя.
Николай Дубровскийон самый11.03.2008, 20:59#
ayavryk, привет :)
А статья с x9.ru еще где-то жива? Я только в веб-архиве нашел...
богоносец15.03.2008, 03:17#
| А чем плох JS?
| Яндекс не индексирует то, что находится внутри тега NOSCRIPT

Рамблер, Гугл и Яха его содержимое индексируют.

Когда Яндекс видит теги Script или Noscript — он считает это границей пассажа. А Noindex позволяет сделать из абзаца приличный текстовый фрагмент для сниппета.

| JS - это лишний код.

?xml-stylesheet type="text/xsl" — лишнее ожидание ещё одного отклика сервера.

| надо давить на моск яндексоидам, чтоб они уже наконец переучили своего индексатора

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

Надо давить на W3C чтоб они отучили свой валидатор ругаться на безобидные выдумки наци-анальных ПС.
Влад20.03.2008, 22:19#
Очень классно, что noindex можно сделать валидным, вот только я смотрю это не так просто, надо немного поразбираться в том, что вы описали!
бизнес мэн19.04.2008, 20:05#
Интересный подход. Этакая альтернатива яве и прочим.

Каждому свое вообще то, поэтому способ интересен, хотя до этого как-то яву все время использовал, но думаю. надо бы и этот метод попробовать.
Softer13.05.2008, 10:09#
а вы в этом блоге использовали что-то подобное для коментов?
Дмитрий30.06.2008, 20:07#
Интересно написано)
Как всегда приятно читать Ваши посты)
Мастероk18.07.2008, 09:40#
Особо ничего не понял, но на кое-какие мысли статья навела.
garf27.07.2008, 13:53#
УРА, народ, на моем сайте поднялся ПР, с пр0 до ПР2, я просто рад, очень рад!!!
Dushes21.08.2008, 22:10#
Хотелось бы спросить автора насчёт дизайна. Это ты сам рисовал или это шаблон??? Хочется что-то типо этого на свой новый блог повесить...
Юморной тренер24.08.2008, 10:13#
Пости не глупые скажу Вам, почитать полезно
Winston13.09.2008, 21:26#
У Вас действительно неплохой ресурс... Есть что почитать и почерпнуть для себя... А подписаться на Ваши статьи можно как нить??? Если несложно, напишите, как это сделать...
GRIZ.1621.11.2008, 20:28#
Супер, что noindex можно сделать валидным!
блин, сам чёрт ногу сломит в том как это сделать!!! буду пытаться..
Enyusha06.06.2009, 02:10#
Неплохо придумал. Надо будет попробывать.
Meletiy05.08.2009, 20:34#
Идея хорошая, но моих знаний не достаточно :(. Буду разбираться, спасибо за статью.
Natalyushka08.12.2009, 17:14#
Все вроде звучит понятно.
10.12.2009, 02:17#

+ горячо любимый (во все дыры)">

Не индексируй меня! Пожа-а-а-алуйста!">
ентот кусок ">
. А этот">
, не стоит">

там — абсуждалово... чОртовой вуалиднысти. ">
]>


<?xml?> Cмотрят искалки в <!ENTITY noin "неиндексируемый код"> — вставляемый в текст &noin; или как?

body {margin: 11%}
span, div {color: #C00; cursor: help}



Дорогой &noin0; и грезящий о глобализации Яндекс!&noin1;Вот &noin2;можно проиндексировать&noin3;, пожалуй&noin4;.
Ну, мудаки затеяли&noin5;FireFox и Opera отображают.
Насколько же детально поисковики разбирают XML?



-->
10.12.2009, 02:21#
Удалите пару комментов, там XML-я не осталось.
Hooston13.12.2009, 10:38#
Спасибо за код, давно искал его..
YUlyusya22.01.2010, 12:20#
Респект автору.
Leksa19.02.2010, 21:07#
не надо говорить плохо
brabus08.12.2011, 18:32#
блин, не показывает весь код, короче админ удали предыдущие мои комменты, в общем noindex надо спрятать в комментариях вот ссылка на тему где этот вопрос был решен http://forum.searchengines.ru/showthread.php?p=9761005#post9761005
akkad29.09.2012, 20:29#
Что-то тяжело очень. Я его оставил. А в принципе можно и отказаться.
shah27.05.2013, 15:23#
Вообще, есть вполне имеющая право на жизнь версия, что Яндекс относится к валидному коду гораздо лучше, чем к коду с ошибками! Смысл в том, что серьезный сайт, созданный профессионалами, скорее будет содержать правильный, валидный код (http://validator.w3.org/), и соответственно более достоверную информацию, чем страничка на "народе", сделанная дилетантом, и Яндекс первому сайту релевантность большую прилепит, в случае похожего по смыслу и объему текста!
То же самое: информации откуда вы больше доверяете - из криво напечатанной на косой коричневой бумаге листовке на столбе с орфографичесими ошибками, или большой и чёткой "Российской газете", где всё выверено и нет ошибок?
http://www.kurinfo.ru

Написать коммент: памятка постеру

 

Крутые посты wtf??? →

02.10.2012 · 90 камментов · рейтинг 19.58
27.06.2012 · 37 камментов · рейтинг 12.21
15.02.2013 · 23 каммента · рейтинг 10.32
28.04.2008 · 44 каммента · рейтинг 9.8
06.03.2008 · 29 камментов · рейтинг 7.89

Последне камменты

21.05.2017  Vadim GukОбработка кликов и цели в Яндекс.Метрике, улучшенный вариант: Большое спасибо за решение задачи.
20.05.2017  ДмитрийТестовое задание для PHP-программиста (Junior): А джуны ещё нужны у вас в компании?
18.04.2017  ДубрОбработка кликов и цели в Яндекс.Метрике, улучшенный вариант: Вячеслав, блин, я там скобку потерял =) Обновил, ...
17.04.2017  Вячеславтам же: вот http://www.totalat.ru/service/remont-akpp-bmw/
17.04.2017  Вячеславтам же: Вашу версию вставил. Даже alert проверочный вывод...

Статсы