В модуле используется hook_menu, есть item
$items['mobile'] = array(
'title' => 'my test',
'access arguments' => TRUE,
'page callback' => 'my_page_callback',
'type' => MENU_CALLBACK,
);
страница /mobile доступна - все ок.
Только она же будет открываться по урлам /mobile/fgdfgfdg /mobile/eegfgd/dfgdfg и.т.д.
Кто-нибудь стандартный способ этого избежать?
У некоторых стандартных модулей поведение точно такое же с внутренними страницами.
Комментарии
А зачем этого избегать?
Так-то можно, конечно, просто добавьте проверку на 2й аргумент, если в нем хоть что-то передается, возвращайте 404, но на фиг?
Даже странно отвечать на вопрос, чем плохо дублирование контента по разным урлам.
Спасибо за совет с проверкой - это последний довод королей, хотелось бы стандартного решения
и все же? у меня складывается ощущение, что Вы не совсем понимаете, что есть дублирование контента.
для друпала стандартно делать редиректами, но только, если это действительно необходимо, а для нового сайта, обычно и вовсе не требуется.
Что за чушь вы пишете? Не должно быть дубликатов страниц. На левые url должен отдаваться статус 404.
Вот, почитайте азы: http://googlewebmastercentral.blogspot.com/2008/08/farewell-to-soft-404s...
http://googlewebmastercentral.blogspot.com/2011/05/do-404s-hurt-my-site....
Теперь что касается редиректов. Для друпала ни разу не стандартно обрабатывать несуществующую ошибку редиректами. Так только криворукие программисты делают. Редирект нужно использовать в том случае, если алиас url сменился на новый и в базе есть об этом запись, редирект с системного пути на алиас и еще несколько случаев (см. модуль ). Но редиректить несуществующие url - прямая дорога к бану в поисковых системах.
Есть n страниц с урлами
/mobile
/mobile/gfdgdf/gd/fg/d
/mobile/dfgdfgfgd
и.т.д.
(они в.т.ч. с разными канониклами)
с одинаковым заголовком "Купить ванны в Сызрани" - это плохо. Это действительно надо объяснять?
Таких страниц бесконечное множество на каждом сайте на основе друпала (а также на многих других, где роутинг работает таким же образом). Но вдруг некий начинающий СЕОшник сделал открытие века - контент дублируется. Гугл и Яндекс десять лет не замечали бесконечное число дублированного контента, а вы нашли )
Я не большой спец в СЕО (не дай бог им быть), но откуда поисковик возьмет этот путь? Вы думаете, поисковики рандомно генерят урлы и индексируют их? Поисковик будет ходить только по тем ссылкам, которые есть на сайте и которые разрешены для него.
и этим все сказано.
Буду признателен, если у кого-то будут идеи по сабжу, а не околофилософский трёп.
ancient, вам точно нужно использовать MENU_CALLBACK? Ведь это
Попробуйте MENU_NORMAL_ITEM
Вы хоть сами-то осознаете какую глупость сморозили? Попробую объяснить:
- URL - не есть путь, URL включает в себя протокол, домен, редко порт, путь, GET параметры и хеш(на последний, в данном случае, по барабану).
- GET параметры дадут Вам столько комбинаций "дублированных" URL, что "проблемы" с путем покажутся цветочками
- Зачастую проблема не скрыть урл от поисковика, а как раз таки наоборот, сделать его видимым
Костыль. в my_page_callback:
IF(mobile != mobile) {
drupal_goto('PAGE 404')
}
Если убрать эту фразу из комментария, то что в нем не так? вы правда считаете, что поисковик будет ходить по урлам, которые нигде не указаны?
Пример дублирования контента:
Заказчик, видимо, хотел, чтобы при наведении на пункт меню(то есть, даже не при клике), сразу отображался контент, одностраничник, так сказать, программист это реализовал, потом СЕОшник захотел, чтобы у каждой страницы был свой уникальный URL и теги, программист и это реализовал, в итоге, один и тот же контент стал виден поисковикам на разных урлах, так еще и на каждом урле, контент самой страницы дублируется по 2 раза.
Спасибо, да MENU_NORMAL_ITEM - здесь уместнее, но проблему все равно не решает
Даже не буду пугать историями про то что Bing ходит по ссылкам которые просто пересылаются в скайпе (допустим с ошибкой),
а Яндекс ходит по ссылкам, тупо попавшим в отчеты Метрики.
Простой пример из практики, есть у Вас, условный код для страницы /russia/mobile:
<?php
$path = "russia/mobile";
...
?>
Вот опечатался программист и забыл / в начале, или любая аналогичная ошибка в меру криворукости и случайности.
В правильном случае
/russia/russia/mobile - отдает 404
и корпоративные сканеры, гугл, яндекс мастера сразу показывают битую ссылку, которая быстро правится.
В случае "вы правда считаете..."
Получаете бесконечно страниц с одинаковым контентом и ответом 200, которые постепенно сканятся
и шанс узнать про них сразу не так велик.
Господин sg85,
то что Вы не знаете ответ на поставленный вопрос всем здесь уже ясно.
Не надо сюда больше ничего писать, пожалуйста.
Дубли страниц - это действительно плохо. Но 404 нужно выводить только на несуществующие страницы, а дубли нужно склеивать редиректами и никак иначе. Наглядный пример - на позапрошлой неделе выбирал себе телефон на площадке одного из онлайн-каталогов. Нашёл продавца с наиболее привлекательным ценником, кликнул, а сервер выдал мне, что доступ запрещён. Фишка была в том, что ссылка имела вид: "домен/категория/товар?какая-то фигня от партнёрки яндекса". Удалил хвостик после вопросительного знака и ссылка открылась. В итоге всё купил и всем доволен. Но это же я такой умный, я типа погромист, а большинство юзеров вообще не поймёт, в чём дело и со стопроцентной гарантией уйдёт в любой другой магазин, где заботятся об отношении покупателей, а не о поисковых роботах.
Все правильно, если дубли уже засвечены - то редиректы, все так. В данном случае речь о несуществующих страницах\урлах, для которых отдается внятный контент, вместо 404.
яндекс тоже шит белыми нитками и любит плодить дубли типа https://pogoda.yandex.ru/moscow/asdqwerty
и это тоже дубль https://support.google.com/////chrome/?hl=ru&asd=qwerty&seo=brains+hands...
Во-первых это поисковики, они могут творить что захотят.
Во-вторых в криворукость Яндекса могу поверить легко, не единожды натыкались.
По гуглу, хоть бы проверили, там каноникл стоит
<link href="https://support.google.com/chrome/?hl=ru" rel="canonical">
(ну и считается, что /// в принципе игнорируется)
По Яндексу, кстати, урл следующего уровня будет уже 404
https://pogoda.yandex.ru/moscow/asdqwerty/qwert
Видимо, где-то кривое правило.
Каким-то образом ветка с конкретным вопросом превратилась в сео-демагогию =\
На drupal.ru всегда так?
Если у гугла спросить "дубли site:drupal.ru", "дублирование контента site:drupal.ru", "дублирование страниц site:drupal.ru", то найдется ответ на вопрос
для вьюсовых страниц есть https://www.drupal.org/project/views404, для всего остального canonical имеется, в остальных случаях - кастомный модуль
Спасибо, речь не про views.
В моем примере canonical у всех страниц будет разный.
Кастомное решение(в.т.ч. и для canonical) мы обсудили в самом начале - таких вариантов будет много(я еще неделю назад один из них сделал).
Речь именно о том как решить вопрос настройками меню.
а в page callback написать?
return MENU_NOT_FOUND;
}
Drupal - CMS/CMF, а не искусственный интеллект.
Можно я просто процитирую, чтобы не повторяться:
Моя же есть писать на русском языке:
спрашивался стандартный способ, настройками, параметрами, а не писать ручками костыли в коллбэке,
пусть ничего в них страшного и нет на первый взгляд.
ну чтобы не повторяться не повторяться, решение было дано в первом комменте, хотя это уже не первый подобный топик и даже не второй
распиши подробный алгоритм подобного функционала и тогда придет понимание невозможности его реализации
Это решение как и Ваше не на ту конкретную задачу про которую я спрашивал,
и я написал про это во втором комменте.
Возможно(я уже почти уверен, покопавшись в ядре), что такого решения и нет.
Буду очень признателен за ссылки на другие топики по сабжу(раз их много).
Вот этот читал изначально, практически о том же:
http://www.drupal.ru/node/61365
но там советы были мимо, и, видимо, в итоге все свелось к views.