Как убрать дубли страниц в MODX?

Александр
Александр
2,1K
8
Содержание:
  1. Комментарии
Александр, добрый вечер! Задался вопросом как убрать дублирование контента в modx revo, но с некоторыми моментами не всё так просто, мне знакомы таки варианты:

Чтобы указать приоритет адреса сайта со слешем / или без а так же с префиксом www или без него, нужно в корневой директории открыть файл .htaccess и раскомментировать вот эти строки:

# Переадресация с www.site.ru на site.ru
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^site\.ru [NC]
RewriteRule (.*) http://site.ru/$1 [R=301,L]

# Добавляем слеш к адресам - site.ru -> site.ru/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..{1,10}$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://site.ru/$1/ [L,R=301]
Если нужно избавиться от дублей типа: site.ru/index.php
Создаём плагин и вешаем его на событие OnHandleRequest
<?php
switch ($modx->event->name) {
    case 'OnHandleRequest':
        if (strpos($_SERVER['REQUEST_URI'],'index.php') !== false && $modx->context->get('key') != 'mgr') {
            if (!empty($_GET['id'])) {
                $id = (int)$_GET['id'];
                if (!$modx->getCount('modResource', array('id' => $id, 'published' => 1, 'deleted' => 0))) {
                    $modx->sendErrorPage();
                } 
            } else {
                $id = $modx->getOption('site_start', null, 1);
            }
            $modx->sendRedirect($modx->makeUrl($id),array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
        }
        break;
}
Александр, как можно избавиться от таких дублей: site.ru/?id=2, понятно что есть rel canonical и файл robots.txt, но всё же, как можно решить проблему с таким дублированием?

Комментарии: 8

  1. Александр
    Александр
    2020-01-16 23:20:38
    Александр, у любого сайта modx, если к главной добавить id, пример site.ru/?id загрузиться страница, это же дубль главной получается? И правильней, было бы сделать редирект с таких url на главную или я не прав?
  1. Александр Мальцев
    Александр Мальцев
    2020-01-17 13:20:19
    Любое добавление GET-параметров и разных их значений к URL может означать дубль.

    Один из вариантов как можно убрать дубли — это указать в robots.txt определённых директив, с помощью которых дать понять какие параметры поисковыми роботами учитывать не нужно.

    Другой вариант — это добавить на страницы элемент с атрибутом rel, имеющим значение canonical:
    <link rel="canonical" href="https://example.com/post-7" />
    
    Это будет означать, что у этой странице каноническим будет URL:
    https://example.com/post-7
    
    Все остальные будет его копиями.

    Можете добавить в проект два этих решения.

    Ещё в «Google Search Console» имеется настройка «Параметры URL», в ней можно добавить параметры и указать на что они влияют.
  • Александр
    Александр
    2020-01-17 23:07:03
    Александр, спасибо Вам за подробный и понятный ответ.
  • Александр Мальцев
    Александр Мальцев
    2020-01-14 03:17:55
    Привет! Убрать доступ к ресурсам через id можно посредством включения в настройках системного параметра request_method_strict. Данный параметр находится в «core -> Шлюз».
    1. Александр
      Александр
      2020-01-14 11:25:28
      Александр, что самое странное, у меня не зависимо от того, включён этот параметр или выключен, адреса с ?id= всё равно работают, кеш чистил, с чем это может быть связано? Возможно есть еще какие варианты на подобие предыдущих?
    2. Александр Мальцев
      Александр Мальцев
      2020-01-16 14:47:46
      Есть ли смысл что-то изобретать, если это должно работать. Необходимо просто найти из-за чего это.
    3. Александр
      Александр
      2020-01-16 17:54:05
      Смысла наверно мало, но уверен, что бывает когда маленький велосипед в каком-то месте, поможет избежать использования трактора в другом:). Вы правы, буду искать в чём проблема и обязательно напишу с чем это было связано. Спасибо.
    4. Александр
      Александр
      2020-01-16 19:48:22
      Александр, оказывается всё работает:) В данном случае виновата моя не внимательность, спасибо Вам!