Дублирование страницы по разным путям (подпутям) при hook_menu

Главные вкладки

Аватар пользователя ancient ancient 29 мая 2015 в 19:51

В модуле используется 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 и.т.д.

Кто-нибудь стандартный способ этого избежать?
У некоторых стандартных модулей поведение точно такое же с внутренними страницами.

Комментарии

Аватар пользователя sg85 sg85 29 мая 2015 в 19:56

А зачем этого избегать?

Так-то можно, конечно, просто добавьте проверку на 2й аргумент, если в нем хоть что-то передается, возвращайте 404, но на фиг?

Аватар пользователя ancient ancient 29 мая 2015 в 20:03

Даже странно отвечать на вопрос, чем плохо дублирование контента по разным урлам.
Спасибо за совет с проверкой - это последний довод королей, хотелось бы стандартного решения Smile

Аватар пользователя sg85 sg85 29 мая 2015 в 21:25

"ancient" wrote:
Даже странно отвечать на вопрос, чем плохо дублирование контента по разным урлам.

и все же? у меня складывается ощущение, что Вы не совсем понимаете, что есть дублирование контента.

"ancient" wrote:
Спасибо за совет с проверкой - это последний довод королей, хотелось бы стандартного решения :)

для друпала стандартно делать редиректами, но только, если это действительно необходимо, а для нового сайта, обычно и вовсе не требуется.

Аватар пользователя Sky Cat Sky Cat 30 мая 2015 в 4:15

sg85 wrote:
"ancient" wrote:
Даже странно отвечать на вопрос, чем плохо дублирование контента по разным урлам.

и все же? у меня складывается ощущение, что Вы не совсем понимаете, что есть дублирование контента.

"ancient" wrote:
Спасибо за совет с проверкой - это последний довод королей, хотелось бы стандартного решения :)

для друпала стандартно делать редиректами, но только, если это действительно необходимо, а для нового сайта, обычно и вовсе не требуется.

Что за чушь вы пишете? Не должно быть дубликатов страниц. На левые 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 - прямая дорога к бану в поисковых системах.

Аватар пользователя ancient ancient 29 мая 2015 в 22:55

"sg85" wrote:
и все же? у меня складывается ощущение, что Вы не совсем понимаете, что есть дублирование контента.

Есть n страниц с урлами
/mobile
/mobile/gfdgdf/gd/fg/d
/mobile/dfgdfgfgd
и.т.д.
(они в.т.ч. с разными канониклами)

с одинаковым заголовком "Купить ванны в Сызрани" - это плохо. Это действительно надо объяснять?

Аватар пользователя serega111 serega111 29 мая 2015 в 23:55

"serega111" wrote:
Есть n страниц с урлами
/mobile
/mobile/gfdgdf/gd/fg/d
/mobile/dfgdfgfgd

Таких страниц бесконечное множество на каждом сайте на основе друпала (а также на многих других, где роутинг работает таким же образом). Но вдруг некий начинающий СЕОшник сделал открытие века - контент дублируется. Гугл и Яндекс десять лет не замечали бесконечное число дублированного контента, а вы нашли )
Я не большой спец в СЕО (не дай бог им быть), но откуда поисковик возьмет этот путь? Вы думаете, поисковики рандомно генерят урлы и индексируют их? Поисковик будет ходить только по тем ссылкам, которые есть на сайте и которые разрешены для него.

Аватар пользователя ancient ancient 30 мая 2015 в 1:51

"serega111" wrote:
Я не большой спец в СЕО

и этим все сказано.

Буду признателен, если у кого-то будут идеи по сабжу, а не околофилософский трёп.

Аватар пользователя Sky Cat Sky Cat 30 мая 2015 в 4:16

ancient, вам точно нужно использовать MENU_CALLBACK? Ведь это

Quote:
A hidden, internal callback, typically used for API calls.

Callbacks simply register a path so that the correct function is fired when the URL is accessed. They do not appear in menus or breadcrumbs.

Попробуйте MENU_NORMAL_ITEM

Аватар пользователя sg85 sg85 30 мая 2015 в 5:17

Вы хоть сами-то осознаете какую глупость сморозили? Попробую объяснить:
- URL - не есть путь, URL включает в себя протокол, домен, редко порт, путь, GET параметры и хеш(на последний, в данном случае, по барабану).
- GET параметры дадут Вам столько комбинаций "дублированных" URL, что "проблемы" с путем покажутся цветочками
- Зачастую проблема не скрыть урл от поисковика, а как раз таки наоборот, сделать его видимым

"Sky Cat" wrote:
Что за чушь вы пишете? Не должно быть дубликатов страниц. На левые url должен отдаваться статус 404.
Вот, почитайте азы: http://googlewebmastercentral.blogspot.com/2008/08/farewell-to-soft-404s...
http://googlewebmastercentral.blogspot.com/2011/05/do-404s-hurt-my-site....
ткните, пожалуйста, пальцем, где там написано, что поисковые системы занимаются "угадыванием" URL? И почему это самое угадывание не видно в логах?
"Sky Cat" wrote:
Теперь что касается редиректов. Для друпала ни разу не стандартно обрабатывать несуществующую ошибку редиректами. Так только криворукие программисты делают. Редирект нужно использовать в том случае, если алиас url сменился на новый и в базе есть об этом запись, редирект с системного пути на алиас и еще несколько случаев (см. модуль  globalredirect[/module]). Но редиректить несуществующие url - прямая дорога к бану в поисковых системах.

именно про это я и говорил

"Sky Cat" wrote:
ancient, вам точно нужно использовать MENU_CALLBACK? Ведь это

это вообще тут причем? это всего лишь тип ссылки в меню

То есть, пока Вы где-нибудь явно не укажите ссылку на страницу, ни один поисковик про неё и не узнает, и получив ссылку, ни один поисковик не будет ее переписывать.

P.S. Господа СЕОшники, не в обиду будет сказано, но вы гуманитарный заканчивали?

Аватар пользователя serega111 serega111 30 мая 2015 в 10:27

"ancient" wrote:

"serega111" wrote:
Я не большой спец в СЕО

и этим все сказано.

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

Аватар пользователя sg85 sg85 30 мая 2015 в 15:07

Пример дублирования контента:
Заказчик, видимо, хотел, чтобы при наведении на пункт меню(то есть, даже не при клике), сразу отображался контент, одностраничник, так сказать, программист это реализовал, потом СЕОшник захотел, чтобы у каждой страницы был свой уникальный URL и теги, программист и это реализовал, в итоге, один и тот же контент стал виден поисковикам на разных урлах, так еще и на каждом урле, контент самой страницы дублируется по 2 раза.

Аватар пользователя ancient ancient 31 мая 2015 в 21:46

"Sky Cat" wrote:
Попробуйте MENU_NORMAL_ITEM

Спасибо, да MENU_NORMAL_ITEM - здесь уместнее, но проблему все равно не решает Sad

"serega111" wrote:
Если убрать эту фразу из комментария, то что в нем не так? вы правда считаете, что поисковик будет ходить по урлам, которые нигде не указаны?

Даже не буду пугать историями про то что Bing ходит по ссылкам которые просто пересылаются в скайпе (допустим с ошибкой),
а Яндекс ходит по ссылкам, тупо попавшим в отчеты Метрики.

Простой пример из практики, есть у Вас, условный код для страницы /russia/mobile:

<?php
        $path 
"russia/mobile";
        ... 
?>
   <a href = "<?=$path;?>" ...

Вот опечатался программист и забыл / в начале, или любая аналогичная ошибка в меру криворукости и случайности.

В правильном случае
/russia/russia/mobile - отдает 404
и корпоративные сканеры, гугл, яндекс мастера сразу показывают битую ссылку, которая быстро правится.

В случае "вы правда считаете..."
Получаете бесконечно страниц с одинаковым контентом и ответом 200, которые постепенно сканятся
и шанс узнать про них сразу не так велик.

"sg85" wrote:
P.S. Господа СЕОшники, не в обиду будет сказано, но вы гуманитарный заканчивали?

Господин sg85,
то что Вы не знаете ответ на поставленный вопрос всем здесь уже ясно.
Не надо сюда больше ничего писать, пожалуйста.

Аватар пользователя gun_dose gun_dose 1 июня 2015 в 9:18

"ancient" wrote:
Есть n страниц с урлами
/mobile
/mobile/gfdgdf/gd/fg/d
/mobile/dfgdfgfgd
и.т.д.
(они в.т.ч. с разными канониклами)
с одинаковым заголовком "Купить ванны в Сызрани" - это плохо. Это действительно надо объяснять?

Дубли страниц - это действительно плохо. Но 404 нужно выводить только на несуществующие страницы, а дубли нужно склеивать редиректами и никак иначе. Наглядный пример - на позапрошлой неделе выбирал себе телефон на площадке одного из онлайн-каталогов. Нашёл продавца с наиболее привлекательным ценником, кликнул, а сервер выдал мне, что доступ запрещён. Фишка была в том, что ссылка имела вид: "домен/категория/товар?какая-то фигня от партнёрки яндекса". Удалил хвостик после вопросительного знака и ссылка открылась. В итоге всё купил и всем доволен. Но это же я такой умный, я типа погромист, а большинство юзеров вообще не поймёт, в чём дело и со стопроцентной гарантией уйдёт в любой другой магазин, где заботятся об отношении покупателей, а не о поисковых роботах.

Аватар пользователя ancient ancient 3 июня 2015 в 15:58

"gun_dose" wrote:
Дубли страниц - это действительно плохо. Но 404 нужно выводить только на несуществующие страницы, а дубли нужно склеивать редиректами и никак иначе.

Все правильно, если дубли уже засвечены - то редиректы, все так. В данном случае речь о несуществующих страницах\урлах, для которых отдается внятный контент, вместо 404.

Аватар пользователя ancient ancient 4 июня 2015 в 0:19

Во-первых это поисковики, они могут творить что захотят.
Во-вторых в криворукость Яндекса могу поверить легко, не единожды натыкались.

По гуглу, хоть бы проверили, там каноникл стоит
<link href="https://support.google.com/chrome/?hl=ru" rel="canonical">
(ну и считается, что /// в принципе игнорируется)

По Яндексу, кстати, урл следующего уровня будет уже 404
https://pogoda.yandex.ru/moscow/asdqwerty/qwert

Видимо, где-то кривое правило.

Каким-то образом ветка с конкретным вопросом превратилась в сео-демагогию =\
На drupal.ru всегда так?

Аватар пользователя drupby drupby 4 июня 2015 в 1:05

"ancient" wrote:
Каким-то образом ветка с конкретным вопросом превратилась в сео-демагогию =\

Если у гугла спросить "дубли site:drupal.ru", "дублирование контента site:drupal.ru", "дублирование страниц site:drupal.ru", то найдется ответ на вопрос
"ancient" wrote:
На drupal.ru всегда так?

для вьюсовых страниц есть https://www.drupal.org/project/views404, для всего остального canonical имеется, в остальных случаях - кастомный модуль

Аватар пользователя ancient ancient 4 июня 2015 в 1:20

"drupby" wrote:
для вьюсовых страниц есть https://www.drupal.org/project/views404, для всего остального canonical имеется, в остальных случаях - кастомный модуль

Спасибо, речь не про views.
В моем примере canonical у всех страниц будет разный.
Кастомное решение(в.т.ч. и для canonical) мы обсудили в самом начале - таких вариантов будет много(я еще неделю назад один из них сделал).

Речь именно о том как решить вопрос настройками меню.

Аватар пользователя ancient ancient 4 июня 2015 в 18:08

"drupby" wrote:
а в page callback написать?
if (arg(1)) {
return MENU_NOT_FOUND;
}

Можно я просто процитирую, чтобы не повторяться:

"ancient" wrote:
Спасибо за совет с проверкой - это последний довод королей, хотелось бы стандартного решения :)

"ancient" wrote:
таких вариантов будет много(я еще неделю назад один из них сделал).

Моя же есть писать на русском языке:

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

Аватар пользователя drupby drupby 4 июня 2015 в 20:00

"ancient" wrote:
Можно я просто процитирую, чтобы не повторяться:

ну чтобы не повторяться не повторяться, решение было дано в первом комменте, хотя это уже не первый подобный топик и даже не второй
"ancient" wrote:
спрашивался стандартный способ, настройками, параметрами, а не писать ручками костыли в коллбэке,

распиши подробный алгоритм подобного функционала и тогда придет понимание невозможности его реализации

Аватар пользователя ancient ancient 5 июня 2015 в 5:05

"drupby" wrote:
ну чтобы не повторяться не повторяться, решение было дано в первом комменте, хотя это уже не первый подобный топик и даже не второй

Это решение как и Ваше не на ту конкретную задачу про которую я спрашивал,
и я написал про это во втором комменте.

Возможно(я уже почти уверен, покопавшись в ядре), что такого решения и нет.

Буду очень признателен за ссылки на другие топики по сабжу(раз их много).
Вот этот читал изначально, практически о том же:
http://www.drupal.ru/node/61365

но там советы были мимо, и, видимо, в итоге все свелось к views.