дубли контента вида ".../page-1" и несуществующие страницы ".../page-xxx"

+23
5.18K
по мотивам темы а также этой

1) Статьи

Решение топорное, но оно вроде работает у меня на ICMS 1.8, насколько я понимаю в 1.9 ничего в этом плане не изменилось...
Проверка на существование странички:
  1. $page = $inCore->request('page', 'int', 1);
  2. $perpage = $cfg['perpage'] ? $cfg['perpage'] : 20;
  3. $total = $inDB->rows_count('cms_content', 'published=1 AND category_id='.$cat['id']);
  4. $total_pages = ceil($total / $perpage);
  5. if ($page > 1 && $page > $total_pages) {cmsCore::error404();}
вставляется в frontend.php компонента content перед! строкой "//PAGE HEADING"
теперь несуществующие страницы пагинатора будут выдавать 404 ошибку, осталось склеить страницы вида /stati/page-1 со страницей /stati:
  1. $rules[] = array(
  2. 'source' => '/^(.+)\/page-1$/i',
  3. 'target' => '/{1}',
  4. 'action' => 'redirect-301'
  5. );
это правило надо добавить в url_rewrite.php (в корне сайта) либо правильнее в custom_rewrite.php, если вы его создавали.теперь сделаем добавление в тайтл страницы ее номера — возвращаемся к файлу frontend.php и после
  1. //PAGE HEADING
  2. if($cat['id']>0){
меняем! строчку
  1. $inPage->setTitle($cat['title']);
на такой код:
  1. $page = $inCore->request('page', 'int', 1);
  2. $page_title = $cat['title'];
  3. if($page>1) { $page_title .= ' - '.$_LANG['PAGE'].' '.$page; }
  4. $inPage->setTitle($page_title);
каталог я не использую, но думаю, что там подобным образом можно также избавиться от этих недостатков ядра.

2. InstantMaps

Для Instantmaps достаточно добавить строчку
  1. if ($page > 1 && $page > $pages) {cmsCore::error404();}
после
  1. //считаем конечное число страниц
  2. $pages = ceil($total / $perpage);
в соответствующий frontend.php
Добавление номера страницы в тайтл там уже есть, редирект "/page-1" такой-же как в статьях(если делали для статей он сработает, добавлять не надо).

3. Универсальный каталог

после
  1. if ($itemscount>0){
  2.  
  3. //pagination
  4. if (!@$advsearch) { $perpage = $cat['perpage']; } else { $perpage='100'; }
  5. $page = $inCore->request('page', 'int', 1);
добавляем
  1. $total_pages = ceil($itemscount / $perpage);
  2. if ($page > 1 && $page > $total_pages) {cmsCore::error404();}
И, т.к. в каталоге отсутствует "page" в УРЛ странички, надо либо его туда добавить, либо, что проще, добавить отдельное правило в url_rewrite.php для склейки страницы типа "/catalog/ххх-1" с "/catalog/ххх":
  1. $rules[] = array(
  2. 'source' => '/^catalog\/(.+)-1$/i',
  3. 'target' => '/catalog/{1}',
  4. 'action' => 'redirect-301'
  5. );
Добавление номера страницы в тайтл там такое-же, как и в статьях, найти и заменить
  1. $inPage->setTitle($cat['title']);
на
  1. $page = $inCore->request('page', 'int', 1);
  2. $page_title = $cat['title'];
  3. if($page>1) { $page_title .= ' - '.$_LANG['PAGE'].' '.$page; }
  4. $inPage->setTitle($page_title);
Изменения для каталога проверены на последней версии 1.9...

P.S. Как предложил Fuze у меня в каталоге и статьях, к сожалению, не получилось, вывод объектов там вроде иначе сделан, чем в actions, либо просто мозгов не хватило…
0
bondar bondar 12 лет назад #
а где в инстант мапс дубли?? там вроде везде добавляет страницу, а в просмотре объекта если добавить - то 404
0
googlebot googlebot 12 лет назад #
в списке объектов категории попробуйте открыть последнюю и потом к ее номеру добавьте любое число.
0
bondar bondar 12 лет назад #
хм, да отображает, хотя я не совсем понимаю. Это считает как дубль??
например /page-66 - отображает титтл страница 66 - это дубль?? если она такая же как и 3 страница, просто на ней нет списка объектов, ну у нее же титл другой, юрл другой. я прост не пойму с чего это считает дублем??
0
bondar bondar 12 лет назад #
и нет повторяющего контента, только категории, так они и так на каждой странице
0
Dost Dost 12 лет назад #
У меня в рекомендациях Гугла показывает как дубли страниц
0
bondar bondar 12 лет назад #
а где это там посмотреть, не могу найти))
0
Dost Dost 12 лет назад #
Оптимизация HTML
0
Dost Dost 12 лет назад #
Только вчера в инструментах для веб-мастеров Гугла увидел дубли, проверил для всех несуществующих страниц с цифрами дубли. Как вовремя! Попробуем.
Спасибо!+
+3
Fuze Fuze 12 лет назад #
Везде, где получаем список, разделенный на страницы проще всего сделать так:

после получения массива списка чего-либо, проверять, не пустой ли он и не первая ли это страница, пример на компоненте actions
после
Код PHP:
  1. $actions = $inActions->getActionsLog();
вставить
Код PHP:
  1. if(!$actions && $page > 1){ cmsCore::error404(); }
аналогично проделать с остальными.
0
letsgo letsgo 12 лет назад #
А нельзя ли это внести в компоненты 1.9.1? так сказать, по горячим следам и правильно.
+3
Fuze Fuze 12 лет назад #
внес уже
0
Dorimen Dorimen 12 лет назад #
Больше ничего из описанного в данной статье делать не нужно?
0
Евгений Фоменко Евгений Фоменко 12 лет назад #
Для УК не проверяли?
Будет работать данное решение? Или оно универсальное?
0
googlebot googlebot 12 лет назад #
Добавил изменения для каталога.
0
Dorimen Dorimen 12 лет назад #
Подскажите, что Fuze имел ввиду со своим комментарием http://instantcms.ru/blogs/zapisnaja-knizhka/dubli-kontenta-vida-page-1-i-nesushestvuyushie-stranicy-page-xxx.html#comment_39525?
0
googlebot googlebot 12 лет назад #
просто более короткий вариант определения существует-ли эта страничка пагинатора.
0
Dorimen Dorimen 12 лет назад #
А что из Вашего варианта нужно заменить тем, что предложил он? Я просто "ни гугу" программировании.
0
googlebot googlebot 12 лет назад #
Тогда лучше вообще ничего нигде не менять, ждите 1.91 или официального патча
0
Dorimen Dorimen 12 лет назад #
Я на 1.9 работаю и вряд ли буду мигрировать.
0
Евгений Фоменко Евгений Фоменко 12 лет назад #
У меня что-то с первого раза не получилось.
Сейчас с самого начала пройдемся...
0
Евгений Фоменко Евгений Фоменко 12 лет назад #
Неа, выдает 404 ошибку при запросе любой страницы вида catalog/1053-2, даже если их в рубрике 40 штук.
0
googlebot googlebot 12 лет назад #
извиняюсь, ошибся при публикации, пропущено вычисление общего кол-ва страниц
Код PHP:
  1. $total_pages = ceil($itemscount / $perpage);
, пост поправил.
0
Евгений Фоменко Евгений Фоменко 12 лет назад #
Ой, а тут я даже не сказал "спасибо" - Вы очень помогли!
0
universe universe 12 лет назад #
аа для доски объявлений не сделаете?
0
universe universe 12 лет назад #
разобрался=)
+2
googlebot googlebot 12 лет назад #
ну так опубликовали бы :)
0
traffs traffs 12 лет назад #
Огроменное спасибо!!! Этого решения мой УК ждал почти год ) За это время гугл съел порядка 6000-7000 пустых страниц каталога ))))

Ещё раз спасибо !!!)
0
traffs traffs 12 лет назад #
К сожалению, В УК, в разделах 404 код не отдаётся sad

вот пример:

http://statmen.ru/catalog/1002-9999

Подскажите, что нужно добавить в коде для таких страниц?
0
googlebot googlebot 12 лет назад #
Действительно, не учел, что категория может содержать только подкатегории, - нужно добавить еще 1 костыль:
Код PHP:
  1. $page = $inCore->request('page', 'int', 1);
  2. if (!$itemscount && $page>1) {cmsCore::error404();}
вставлять перед
Код PHP:
  1. if ($itemscount>0){
(примерно 550 строчка)
0
googlebot googlebot 12 лет назад #
для компонента content приводилось решение только для списка статей, оно и не должно работать для статьи, разбитой на отдельные страницы
0
Dorimen Dorimen 12 лет назад #
Может быть есть смысл это тоже поправить?
+1
Reborn Reborn 12 лет назад #
Хорошо, работает. Спасибо за решение. По аналогии для каждого компонента подходит.
Сделал себе для InstantShop.
frontend.php
0
maia maia 11 лет назад #
Спасибо! Но что-то у меня не совсем все получилось. УК 1.9 - 404 стал нормально на эти страницы отдавать, а вот редиректа не происходит ((
0
maia maia 11 лет назад #
Ой, сама нашла почему. Редиректить надо так:
$rules[] = array(
'source' => '/^catalog\/([0-9]*)-([0-9]*)$/i',
'target' => '/catalog/{1}',
'action' => 'redirect-301'
);
Я в этом не специалист, но так заработало. Поправьте, плз, если не правильно, пока не поздно ))
0
googlebot googlebot 11 лет назад #
Так у Вас все страницы этой категории будут склеены с индексной, а нужно только первую.
0
maia maia 11 лет назад #
Да, правда, что-то не то получилось? А почему только первую? Как раз первую и не надо. У меня, например, куча каких-то страниц типа /catalog/1001-574 - вот с ними что делать? на самом деле есть страницы 1001-9, 1001-10, а вот дальше-то откуда они берутся? И как их отредиректить?
0
maia maia 11 лет назад #
И то же самое в фотогалерее (( Так как от них избавиться, хоть без редиректа, не подскажете?
0
maia maia 11 лет назад #
Нет, в галерее нету таких, запуталась )) Но вот каталожные 404 не редиректятся все равно.
0
googlebot googlebot 11 лет назад #
404 ошибку и не надо редиректить, нужно только склеить дубли первой страницы списка /catalog/1001-1 и /catalog/1001, они одинаковы по содержанию.
0
maia maia 11 лет назад #
А для форума как это сделать, не подскажете? Там у меня на одну страницу получается аж по три дубля - типа /forum/threadh93-1.html и /forum/threadh93/1.html
0
googlebot googlebot 11 лет назад #
maia, для какой версии движка?
0
Dorimen Dorimen 11 лет назад #
Для 1.9 тоже :)
0
Евгений Фоменко Евгений Фоменко 10 лет назад #
googlebot, в 1.10.3 проблема в каталоге осталась. Вы не посмотрите? Думаю многим актуально будет....
Если временем не располагаете, отпишитесь - может есть смысл обратиться к кому-то еще, не хочется чтобы у сообщества сайты сыпались.
0
googlebot googlebot 10 лет назад #
Евгений Фоменко в багтрекер напишите, у меня со временем совсем плохо, да и сайтов на 1.10 нет...
0
Евгений Фоменко Евгений Фоменко 10 лет назад #
УК проверил - работает корректно (1.10.3)

Еще от автора

Контекстные ссылки v2.2
Предистория тут и тут
Плагин "Контекстные ссылки" v2.1
Модификация плагина Марата версии 2.0 (с хаком /admin/applets/plugins.php) Основные отличия: 1.
Имитация lightbox в статьях
Небольшой фильтр, который делает ресайз изображений в статьях, отформатированных встроенным редактором FCKeditor к единому размеру.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.