16.12.2008

Как правильно давать ссылку на RSS в коде

Вот как все задают ссылку на RSS-трансляцию в HTML? Где-то так (пример из главной Яндекса):

<link rel=alternate type=»application/rss+xml» title=»Блог Яндекса» href=»http://company.yandex.ru/blog/index.rss»>

Давайте разберем эту конструкцию согласно стандартов W3C. Мы увидим, что она неправильная.

LINK
Этот элемент определяет ссылку. В отличие от A, он может появляться только в разделе HEAD — «шапке» документа. Хотя LINK не имеет содержимого, он выражает информацию о взаимоотношениях документов.

Атрибуты  rel и rev дополнительно могут: атрибут rel — определять ссылки вперёд, а атрибут rev — ссылки назад.

rel
Описывает соотношение между текущим документом и якорем, определённым атрибутом href.

alternate
Альтернативная версия текущего документа. Вместе с атрибутом lang, он подразумевает переведённую версию документа. Если используется вместе с атрибутом  media, подразумевает версию, созданную для другого носителя.

(перевод http://pyramidin.narod.ru/html401/ с моими правками)

Так вот, http://company.yandex.ru/blog/index.rss — это НЕ альтернативная версия главной страницы Яндекса. Следовательно, такую конструкцию использовать нельзя. Она уместна только на главной странице блога Яндекса, и там, куда записи блога транслируются, но нигде больше.

Руководствуясь такой логикой, я переделал свой блог на Wordpress таким образом:

<?php if (is_category()) {
$cat = get_category_by_path(get_query_var(‘category_name’),false);
$current = $cat->cat_ID;
$feed = get_category_feed_link($current, »);
} ?>

<?php if (is_category()) { ?>
<link rel=»alternate» type=»application/rss+xml» title=»RSS 2.0″ href=»<?php echo $feed; ?>» />
<?php } ?>

<?php if (is_single()||is_page()) { ?>
<link rel=»alternate» type=»application/rss+xml» title=»RSS 2.0″ href=»<?php echo the_permalink().’feed/’; ?>» />
<?php } ?>

Буду поддерживать стандарты :)



Комментарии (11) RSS

  1. linche | 16.12.2008 at 8:19

    Тру-извращенство блин :))


  2. Александр Анатольевич | 16.12.2008 at 9:50

    Интересно. Правда код не понял что делает (не силён в программировании)


  3. Роман Настенко | 16.12.2008 at 9:58

    Александр, что делает код можно понять, походив по сайту и посмотрев, куда ведет ссылка на RSS на каждой странице, а где ее вообще нет :) И сравнить это со стандартным Ворпдрессом.

    linche, ага, я такой.


  4. Александр Анатольевич | 16.12.2008 at 10:05

    Роман, а если фид пропущен через фидберн. Есть смылс его менять таким образом?


  5. Роман Настенко | 16.12.2008 at 10:08

    Александр Анатольевич, до сегодняшнего дня у меня был пропущен, было 1200 подписчиков. Но я решил, что правильней будет от него отказаться.


  6. Роман Настенко | 16.12.2008 at 10:08

    По этому поводу я отдельно сделаю анонс.


  7. Александр Анатольевич | 16.12.2008 at 10:42

    Хорошо, тогда ждём.


  8. ВНИМАНИЕ! Изменение адреса RSS-трансляции или почему я отказываюсь от Feedburner — Перфектомания | 16.12.2008 at 11:15

    [...] Соответствие стандартам. [...]


  9. Денис | 16.12.2008 at 15:04

    Ммммм… Но ведь теперь РСС с поста показывает не альтернативу посту, а комментарии. Технически, это не совсем альтернатива, не правда ли? Я-то хочу видеть посты в другом виде, т.е. в виде РСС. А полный РСС именно это мне и предлагает. Не так ли?


  10. Роман Настенко | 17.12.2008 at 4:13

    Денис, комментарии — часть этой страницы. При чем, единственная динамичная. То, что в альтернативной версии все остальное отсекается — это ее право.

    Например, если бы на главной странице этого сайта транслировался список из 5 последних записей блога, просто заголовки, то и там можно было бы делать RSS их.


  11. Роман Настенко | 17.12.2008 at 4:15

    Например, вот здесь:
    http://company.yandex.ru/

    Можно было бы размещать RSS и новостей, и блога.

    Я немного неправильно этот момент в тексте пояснил, исправлю.




Комментировать