Обычно я о конкретных модулях для Drupal не пишу, но здесь особый случай.
Views 404 — малоизвестный модуль (по статистики drupal.org его используют на данный момент чуть больше 70-ти сайтов), закрывающий достаточно серьезную брешь в модуле Views, самом популярном модуле, который установлен фактически на каждом первом более-менее сложном сайте (по статистике drupal.org сейчас Views используют около 240к сайтов).
Проблема с Views заключается в следующем — при создании с его помощью страницы с адресом, например, site.com/page, любой адрес вида site.com/page/* будет возвращать 200-тый код состояния HTTP вместо ожидаемого 404-ого.
За примерами ходить далеко не надо:
drupal.ru/online/bla-bla-bla - 200 OK
drupal.org/start/bla-bla-bla - 200 OK
Помимо неудобств для пользователя (набрав вручную адрес в браузере нельзя быть на 100% уверенным, отдается нам нужная статья или же мы допустили опечатку и видим чей-то дубль вместо «404 Not Found»), в один прекрасный момент можно получить в индексе поисковиков сотни и тысячи дублирующихся страниц, от которых избавиться не так-то просто. Говорить о том, что это не совсем хорошо и в итоге может вылиться в наложение фильтров (к примеру, когда на 1к страниц в индексе приходится 100 страниц с контентом и 900 дублей), думаю не стоит. Не стоит также надеяться и на излишнюю сообразительность поисковиков, дескать они умные, дубли сами выкинут. Не выкинут. Лично у меня сотни дублирующихся страниц провисели в индексе с год, пока наконец не настроил на них 404-тый ответ и они не выпали.
Так что всем настоятельно рекомендую — если используете Views, устанавливайте и Views 404.
Модуль Views 404 есть только для Drupal 6.x. Версия бета, но никаких нареканий по работе высказать не могу. К слову, сам модуль появился не так давно, еще год назад, когда я впервые столкнулся с порождаемыми модулем Views дублями, его не было. Проблему пытался решить с помощью «костылей», причем самых разных — но все безуспешно. Спустя год снова вернулся к этой проблеме и был приятно удивлен появлению так не хватавшего мне год назад модуля.
Скачать Views 404 можно на drupal.org.
Комментарии
http://tulvit.ru/post/194?bla-bla-bla
и что? :) это "проблема" не views, а url как такового. указывайте в head каждой страницы rel="canonical" и не будет никаких проблем с поисковиками
http://tulvit.ru/post/194?bla-bla-bla Ну с явной подстановкой GET параметра все понятно.
Но в посте немного о другом. Т. е. скажем у нас есть формирующаяся Views страница раздела
site.com/razdel1/
и материалы в ней с адресами
site.com/razdel1/node-title1
site.com/razdel1/node-title2
Т. е. стандартная такая структура. И вот без views 404 обращение к несуществующему материалу по адресу
site.com/razdel1/node-bla-bla-bla
Будет приводить не к 404-ой ошибке, а к 200-ому ответу сервера. Согласитесь, что это не совсем правильно?
Особенно эта проблема проявляется при смене структуры сайта. На одном сайте у меня была структура примерно такая
site.com/razdel/podrazdel/sometext/node-title
которую сменил потом по некоторым причинам на
site.com/razdel/podrazdel/node-title
В результате в индексе предыдущие адреса остались, только вместо непосредственно материалов выводили дубль страницы категории (которая сформирована Views).
указывайте в head каждой страницы rel="canonical" Спасибо, не знал про этот тег. Хотя все равно его использовать пока не буду=) Он неизвестно когда будет поддерживаться Яндексом, да и вообще я скептически отношусь ко всем тегам "для поисковиков".
дак меджу site.com/razdel1/node-bla-bla-bla и site.com/razdel1?node-bla-bla-bla и любым другим site.com/?bla-bla-bla разницы нет никакой, дело то не в views совсем, вы боретесь с ветряными мельницами :)
*нет никакой разницы
Разница есть - слеш и вообще ЧПУ как таковое.
Да, пусть это разница чисто визуальная, но как пользователь я считаю
site.com/index.php?q=razdel/1
site.com/index.php?q=razdel/2
одинаковыми страницами (пусть и с натяжкой) и не сильно обижусь, если по адресу
site.com/index.php?q=razdel/bla-bla-bla
мне выдастся содержание index.php.
А вот
site.com/razdel/1
site.com/razdel/2
выглядят абсолютно разными страницами. Хотя и то и то суть одно и то же. И здесь я уже ожидаю, что
site.com/razdel/bla-bla-bla
должен вернуть 404 и ничего более.
Т. е. я читаю правильным, что при формировании синонимов урла символу "/" нужно уделять особое внимание (как разделителю).
Разница есть - слеш и вообще ЧПУ как таковое. я про то что, вас почему то заботят дубли вида foo/bar но вам всё равно на foo?bar. views 404 избавляет от капли в море среди дублей. ЧПУ тут совершенно не причём. по стандарту нет никакой разницы какой будет разделитель - / или ?, всё это будет называться uri
site.com/razdel/bla-bla-bla
должен вернуть 404 и ничего более. а site.com/razdel?bla-bla-bla что должен вернуть? ;)
foo/bar но вам всё равно на foo?bar C foo?bar чисто с пользовательской точки зрения аналогия со страницей foo.php с каким-то там параметром. А foo/bar аналогия со страницей bar.php или bar.html, лежащей в каталоге foo. Восприятие разное.
избавляет от капли в море среди дублей. От самой заметно капли. При смене структуры ссылок на сайте вылезают дубли чаще всего из-за Views. Если в адресе конечного материала допустить опечатку, то ответ будет не 404 опять же из-за Views.
а site.com/razdel?bla-bla-bla что должен вернуть? 200. ?bla-bla-bla - параметр текущей страницы. /bla-bla-bla - адрес новой страницы. Пусть и чисто визуально.
чисто с пользовательской точки зрения вот именно что чисто с пользовательской, паукам нет никакой разницы, ведь вы же выдачу волнуетесь а не за пользователей?
200. ?bla-bla-bla - параметр текущей страницы. /bla-bla-bla - адрес новой страницы. Пусть и чисто визуально. для паука нет никаких "параметров" и "адресов", есть URI - Uniform Resource Identifier
Если в адресе конечного материала допустить опечатку, то ответ будет не 404 опять для пользователя кокраз лучше увидеть представление а не 404 ошибку
ЧПУ ведь в стандартном виде имеет структуру "хлебных крошек", типа
сайт/раздел/материал Обращаясь напрямую к адресу
сайт/раздел/ я хочу получить список всех материалов в этом разделе, а обращаясь к
раздел/материал хочу получить страницу с определенным материалом, ну или ошибку "страница не найдена", если материала не существует. И мне как пользователю совершенно без разницы, что и "раздел/материал" и "раздел" это всего лишь значение GET параметра страницы index.php.
паукам нет никакой разницы, ведь вы же выдачу волнуетесь а не за пользователей? Большое количество дублей на сайте появляется чаще всего при смене структуры сайта. Было 1к страниц виде razdel1/razdel2/title, сменили на razdel1/title - в итоге получили 1к дублей из-за Views. Больше дублям на сайте в большом количестве вроде не от куда появляться. Хотя да, в случает смены структуры лучше надо редирект делать со старых адресов на новые.
для пользователя кокраз лучше увидеть представление а не 404 ошибку ИМХО, лучше 404-ую ошибку=)
Набрал кто-то, скажем, drupal/drupal-modul-views-400 - получил 404 ошибку, значит вариантов два, либо опечатка, либо страницу удалили. А если получит 200-ый ответ и вывод непонятно чего, то здесь вариантов куча - так и должно быть, страницу удалили, страница переехала, просто глюк и т. д. и т. п.
Тема постепенно перерастает в холивар=)
Сегодня тоже столкнулся с этой проблемой, думал надо в сторону аргументов копать. А оказалось, что это баг модуля views. Вроде такой мощный модуль, а такие косяки :(
Спасибо, поставил views404 и все стало нормально :)
Раюотоспособна только dev-версия модуля. Обычную не ставьте.