пт, 28/02/2014 - 21:48
Задача
Создать представление доступное только по одному адресу: www.example.com/portfolio.
- Создавать новое представление-страницу (page).
- Указать путь: /portfolio.
- Вывести нужные поля.
Этого не достаточно!
Если оставить всё как есть, то мы обнаружим, что наше представление открывается по адресам:
Содержание этих страниц абсолютно одинаковое.
И если у нас не прописан rel canonical, то поисковые роботы могут на сайте найти одинаковый контент, что может негативно сказаться на позиции сайта в поисковой выдаче.
Пояснение.
Причина в том, что всё что идет после /portfolio/ views воспринимает как аргумент для контекстного фильтра.
То есть для страницы www.example.com/portfolio/foo/bar/ у нас задано два аргумента:
1ый аргумент: foo, 2ой аргумент: bar.
Решение.
Чтобы страница открывалась только по заданному пути, нужно настроить проверку первого аргумента контекстного фильтра.
Для этого создаем новый контекстный фильтр в настройках представления:
- Вкладка Расширенный (Advanced)
- Контекстные фильтры (contextual filters) -> Добавить (Add).
- Глобальный: Ноль.
-
- Когда значение не доступно: отобразить все результаты для указанного.
- Укажите критерий проверки: поставить галочку.
- Проверка: Простая проверка.
- Действие в случае если значение фильтра недействительно: Вывести текст "Ничего не найдено".
- Вкладка Еще
- Провалить проверку, если будет получен любой аргумент.
Теперь из рабочих останется только адрес www.example.com/portfolio.
А по адресам www.example.com/portfolio/foo/, www.example.com/portfolio/foo/bar/ получаем 404 ошибку (Страница не найдена).
По мотивам http://drupal.stackexchange.com/a/48455/13772.
Комментарии
И если у нас не прописан rel
Не могут, если нет ссылки на этот дубликат.
Всегда удивлялся таланту русских переводчиков, поэтому до сих пор модуль Yandex.Metrics содержит папку translations :)
Спасибо за решение!
Спасибо за решение!
Хотя проблема и не очевидна, но метод достаточно интересный и в некоторых случаях пригодится.
Знаю этот трюк, но не
Знаю этот трюк, но не применяю, потому что это вносит путаницу во вьюхи (а там и так путаницы хватает).
Это особенность друпала, а не Views: https://drupal.org/user/1399638/is-awesome-Drupalista
CMS'ки все с 404-ми не дружат. Поисковики уже должны как-то привыкнуть, особенно с учётом доли битрикса в рунете :)
Если вьюх много, то проще
Если вьюх много, то проще поставить модуль Views 404 https://drupal.org/project/views404
Знаю этот трюк, но не
Это дело вкуса, но статью писал, чтобы люди ожидали такое поведение.
А там уже сами выбирали подход.
Катя, ты отличный Drupal разработчик. Бесспорно.
Спасибо, Plazik. Надо попробовать этот модуль.
Но для Drupal 7, только dev версия.
Это дело вкуса
Ну, если поисковики недовольны, то уже не вкуса, а денег. Просто я проблем подобного рода пока не встречала, хотя в друпале такое поведение по умолчанию для большинства путей.
У кого-нибудь есть идеи как
У кого-нибудь есть идеи как поисковик найдет такие дублирующиеся урлы? Он что ясновидец?
typo
Ну а вообще, в данном случае пример простой.
На сложных проектах, если например ты при помощи pathauto задашь у вьюхи адрес /portfolio/, а у нод будет /portfolio/*, то после редактирования/удаления материалов, может получиться ситуация.
Очень редкие случаи,
Очень редкие случаи, произошедшие по вине самого администратора сайта.
с этой проблемой столкнулся
с этой проблемой столкнулся еще лет 5 назад. В индекс попадали дубли страниц списка новостей с совершенно непредсказуемыми хвостами. Проследить логику их появления в индексе особенно на большом сайте весьма проблематично, поэтому лучше сразу делать так чтобы 404 отрабатывала корректно.
Хочу все предупредить!
Хочу все предупредить!
во views 3 (для Drupal 6, 7) есть небольшой баг из-за которого, если аргумент Global:null принимает значение 'all', то он игнорируется.
Если брать пример из статьи, то адреса
Будут работать.
есть патч для Drupal 7 https://www.drupal.org/files/issues/views-no_way_to_remove_all-1951456-5...
Помогите его потестировать.