Дублирование контента в MODx

В MODx несмотря на очевидную SEO-ориентированность существует проблема дублирования контента при использовании ЧПУ (человеко-понятные адреса страниц).

Предположим, что существует страница с идентификатором 26 и псевдонимом alias в корне сайта.
Статус 200 Ok будут отдавать следующие страницы с ОДИНАКОВЫМ контентом


1) http://www.site.ru/26.html
2) http://www.site.ru/26
3) http://www.site.ru/alias.html
4) http://www.site.ru/index.php?id=26

Эта ситуация неприемлема с точки зрения поисковой оптимизации. Решение этой проблемы видится в грамотно составленном файле robots.txt и некоторых изменениях в коде файла document.parser.class.inc.php.

Предлагаемый файл robots.txt подходит для всех проектов на MODx с использованием ЧПУ:

User-agent: *
Disallow: /assets/cache/
Disallow: /assets/docs/
Disallow: /assets/export/
Disallow: /assets/import/
Disallow: /assets/modules/
Disallow: /assets/plugins/
Disallow: /assets/snippets/
Disallow: /install/
Disallow: /manager/
Disallow: /?
Disallow: /*?id=
Host: yoursite.ru

Составленный таким образом файл robots.txt не позволит поисковому роботу проиндексировать дублирующиеся страницы 4-ого типа. Повторю, его можно использовать ТОЛЬКО для сайтов на ЧПУ. Для исключения остальных дублей надо немного исправить document.parser.class.inc.php. Этот файл содержит класс API и находится в /manager/includes/document.parser.class.inc.php.

После строки (примерно 1077) :

надо внести код :

Этот код будет производить перенаправление с цифровых адресов на адреса-псевдонимы, если они есть.

Самая популярная ошибка:

При использовании ЧПУ часто забывают создать псевдоним для главной страницы сайта. Таким образом, создаются дубли самой главной страницы. Как их избежать (закрыть в robots или сделать редирект) — необходимо решать индивидуально для каждого сайта, общего решения пожалуй что нет.

Также существует дублирование контента из-за добавления слешей в конец адреса. В Modx эту проблему можно решить, настроив особым образом .htaccess.

Если на сайте используются суффиксы для URL (по умолчанию .html), в .htaccess надо добавить строки:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.html[/]+$ $1.html [L,R=301]

В коде .html надо заменить на тот суффикс, который используется на сайте.

Если суффикс для сайта пустой, то необходимо привести все урлы «site.ru/doc/» к типу «site.ru/doc». Это делается в .htaccess:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)[/]+$ $1 [L,R=301]

Но, на мой взгляд, лучше установить суффикс «/» и привести все урлы «site.ru/doc» к типу «site.ru/doc/»:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.+[^/]$ http://www.site.ru%{REQUEST_URI}/ [L,R=301]

Для того, чтобы исключить дублирование карт сайта, т.е. поставить редирект с sitemap.xml.html на sitemap.xml в .htaccess, надо добавить строки:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.xml\.html$ $1.xml [L,R=301]

Вместо site.ru нужно поставить доменное имя сайта.

  • А как насчёт слэша на конце адресов?
    Как избежать дублирование страниц с адресами ‘site.ru/doc/’ и ‘site.ru/doc’

  • Дополнил статью. Спасибо за вопрос)

  • Есть ещё неплохой скрипт для автоматического редиректа. Редиректит на выбранный алис и с адресов со слэшами и страницы типа index.php?id=… и пр.

    http://modxcms.com/extras/package/395

  • alex

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)\.xml\.html$ $1.xml [L,R=301]

    Не работает этот метод с SEO Strict плагином.

  • При вставки кода в document.parser.class.inc.php сайт пересает открываться. Пишет:

    Parse error: syntax error, unexpected ‘[‘ in /home/users/d/dimap/domains/group-ra.ru/manager/includes/document.parser.class.inc.php on line 1085

    Подскажите, что ему не нравится?

  • Вероятнее всего вы скопировали строчки из поста, и если не поменять форматирование, то в нем будут неправильные кавычки.

    http://www.mgordeev.ru/files/topress.php

    правильный кусок кода. Только дескрипторы надо убрать)))

  • vitaksa

    Про псевдонимы для главной страницы спасибо!
    А такой вопросик. Происходит дублирование контента Яндексом и гуглом в таких ситуациях:
    http://www.mysite.ru
    mysite.ru
    Как от этого избавится.
    Может вопрос и туповат, но на modx перешел 8 дней назад

  • В .htaccess необходимо добавить строки:

    RewriteCond %{HTTP_HOST} ^yousite\.ru
    RewriteRule .* http://www.yousite.ru.%{REQUEST_URI} [L,R=301]

    подставив вместо yousite адрес Вашего сайта.

  • Strict URLs Вам в помощь.
    на официальном сайте искать тут:
    http://modxcms.com/extras/package/395

  • Чуть не забыл — не забыть добавить Rewrite в .htaccess (по умолчанию закомментирован) — иначе при очистке кэша можно случайно «переехать» с http://www... на «без www» или наоборот. В общем, первый запрошенный документ и сформирует адрес сайта.

  • Использую MODx 1.0.5
    Вставил код в document.parser.class.inc.php — все вроде ок, вот только теперь главная с псевдонимом отображается http://www.site.ru/index (хотя ссылка идет на http://www.site.ru)
    Как его убрать не подскажете?

    • Попробуйте у главной страницы убрать псевдоним.

  • я юзаю плагин TransAlias и он автоматом ставит псевдоним, если поле пустое(

    • Да, тогда проблема. Ничего кроме костыля на ум не приходит.
      строку
      if (intval($res[0])>0){
      заменить на
      if ((intval($res[0])>0)&&(intval($res[0]!=$this->getConfig(‘site_start’)))){

  • Огромное спасибо, подскажите как перенаправлять с http://www.site.ru на site.ru в стандартном modx .htaccess.
    Нигде не могу найти, если ставить обычный 301 с включеными чпу, то ничего не получаеться.

    • В .htaccess необходимо добавить строки:

      RewriteCond %{HTTP_HOST} ^www\.yousite\.ru
      RewriteRule .* http://yousite.ru%{REQUEST_URI} [L,R=301]

      подставив вместо yousite адрес Вашего сайта.

  • Максим

    Приветствую.
    А если используются вложенные урл, то не работает такое исправленьице, или я что-то не понимаю. Например , сайт/catalog/12/ и предположим сайт/catalog/tv/ — одна и таже страница. Это как нибудь можно исправить?

  • anrey

    поставил MODx Revolution 2.0.8-pl (advanced) подскажите как там правильно составить robots.txt

  • andrey

    такого файла document.parser.class.inc.php. в MODx Revolution 2.0.8-pl (advanced) нет, как там бороться с дублями, кстати еще sitemap тоже не создается по тому как тут описано, жду помощи

  • Modx упрямо не хочет в ЧПУ-урлах проставлять точку. Возникла проблема с robots.txt и sitemap.xml В обоих случаях выдает что-то следующее sitemapxml.html и robotstxt.html Если в поле alias написать sitemap.xml и сохранить, то сохраняется как sitemapxml (без точки) Как в .htaccess исправить это?
    С уважением,

    • Может дело в специфичных настройках плагина TransAlias? Попробуйте его отключить.

  • zeus

    всем приве
    ребят подскажите плиз есть сайт есть 1 страница http://www.mysite.ru/cars
    а яндекс видит страницу http://www.mysite.ru/5 т.е. у яндекс не правильный урл. страница одна и таже но под разными урлами. причем проблема только с 1 страницей все остальное норм.
    в админке прописан пункт «ссылка» cars

    • так надо прописать псевдоним и теперь уже редирект ставить

  • zeus

    а не подскажите как это сделать?
    очень прошу

    • Псевдоним поставить в системе — тут наверное комментировать не нужно.
      Если страница одна можно прописать в .htaccess

      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^5$ /cars$1 [L,R=301]

  • zeus

    не получается не как
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^5$ /cars$1 [L,R=301]

    пишу так и не чего не получается не перенаправляет он.
    надо с ссылки http://mysite.ru/5
    оправлять на http://mysite.ru/cars
    псевдоним в свойствах странице прописан.
    и страница доступна одна и та же по обоим адресам,

    • Проверял — должно работать.

      Значит либо htaccess вообще не работает или не там пишите.

  • Anna

    Подскажите, пожалуйста, как сделать редирект со страниц http://site.ru/page.html на url со слэшем типа http://site.ru/page/?

  • Анна

    Добрый день.

    RewriteCond %{HTTP_HOST} ^yousite\.ru
    RewriteRule .* http://www.yousite.ru.%{REQUEST_URI} [L,R=301]
    (скопировала у вас)

    Установила. Теперь у меня адрес в строке выглядит так: http://www.site.ru./obuchenie

    Как убрать точку после .ru

    Пробовала удалить:
    RewriteCond %{HTTP_HOST} ^yousite\.ru
    RewriteRule .* http://www.yousite.ru.%{REQUEST_URI} [L,R=301]

    Не помогает!

    • RewriteCond %{HTTP_HOST} ^yousite\.ru
      RewriteRule .* http://www.yousite.ru%{REQUEST_URI} [L,R=301]

      так правильно. Сейчас в тексте тоже исправлю.

  • Анна

    Спасибо! Потом исправила, когда поняла. Но те, которые уже с точкой, они так теперь и открываются с точкой. Как их исправить?

    • Дело в кеше или системы или браузера. Если все очистить — должно быть ок.

  • Анна

    Спасибо.

  • Создав робот.тхт ПС не индексируют страницы которые создаются через пагинатор. http://site.ru/articles?start=5
    Подскажите как быть?

    И еще вопрос, актуален ли код добавляемый в htacess для новых версий evo? А то что то вешает сайт этот код.

    • В robots.txt вместо Disallow: /*?

      Написать

      Disallow: /*?id=

      Так правильнее будет. Странно, а в какой версии проблема. htaccess вряд ли должен убивать систему.

  • mr.

    В .htaccess добавил строки для склейки дублей со слешом, но почему то в выдаче досих пор присутствуют дубли некоторых страниц, со «/» на конце и без! Что же делать? Само не приятное что главная в индексе ПС получилась тоже со слешом, а ссылки на нее я ставил без него! :\\ Так же и с некоторыми другими, хотя большинство проиндексированы как мне и надо, без «/», но не все. Как на это можно повлиять?

  • Добавил строки:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)\.xml\.html$ $1.xml [L,R=301]

    но редирект с sitemap.xml.html на sitemap.xml не происходит.
    Что еще можно придумать?

  • Товарищи, подскажите, а почему вообще возникает эта проблема?
    Откуда поисковик узнает о неправильных ссылках если на сайте они все будут однотипные?

    • to Neil вообще может по пользовательскому фактору, например кто-то некорректную, но рабочую ссылку разместит. Такое часто бывает, когда ЧПУ начинают использовать не с самого создания сайта. Ну или какой-нибудь сниппет неправильно сработает.

  • Добрый день!
    Подскажите как можно убрать дублирование заголовка страницы (тег title) в самом текстовом наполнении страницы?

  • to mgordeev: Т.е. проблема касается далеко не всех? Может об этом тоже стоит в статье написать?
    А где можно почитать, чем опасна такая ситуация (с дублированием контента)?

  • Антон

    Добрый день, сделал переадресацию с суффикса «.html» на суффикс «/»
    Вроде все нормально, но когда открываю mcpuk — у меня открывается во фреймах сам сайт со страницей 404. то-есть срабатывает переадресация на ‘/’ как исправить? и так и сяк пробовал, не получается.
    Помогите плиз

    Options +FollowSymlinks
    RewriteEngine On
    RewriteBase /

    #KeepAlive On
    #MaxKeepAliveRequests 100

    # Fix Apache internal dummy connections from breaking [(site_url)] cache
    RewriteCond %{HTTP_USER_AGENT} ^.*internal\ dummy\ connection.*$ [NC]
    RewriteRule .* — [F,L]

    # Exclude /assets and /manager directories and images from rewrite rules
    RewriteRule ^(manager|assets)/*$ — [L]
    RewriteRule \.(jpg|jpeg|png|gif|ico)$ — [L]

    # Rewrite domain.com -> http://www.domain.com — used with SEO Strict URLs plugin
    RewriteCond %{HTTP_HOST}.
    RewriteCond %{HTTP_HOST} !^hhh\.ru [NC]
    RewriteRule (.*) hhh.ru/$1 [R=301,L]
    RewriteRule ^(.*)\.html$ $1\/ [R=301,L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^.+[^/]$ hhh.ru%{REQUEST_URI}/ [L,R=301]

  • В head хорошо написать , это решает проблемы с алиасами сайта и работе в бесподобном IE. Это проверено в ModX REVO.

  • В head хорошо написать , это решает проблемы с алиасами сайта и работе в бесподобном IE. Это проверено в ModX REVO.
    Извините за дубль, в первый раз движок порезл тег.

  • Николай

    Подскажите, карта сайта отображается как /sitemap/ , а Яндексу соответственно не нравится, считает директорией, как правило составить что бы отображался /sitemap.xml

    соответственно алиас: sitemap , сайт в режиме без .html, на конце / прописывается

    я попробовал
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^sitemap$ /sitemap\.xml$1 [L,R=301]
    выдает /sitemap.xml/

    у меня там еще одно добавлено правило
    #RewriteCond %{REQUEST_FILENAME} !-f
    #RewriteRule ^.+[^/]$ http://xxxxxx.ru%{REQUEST_URI}/ [L,R=301]

    как их вместе соединить? что бы они не мешали друг другу?

  • Dmitriy Smolyakin

    Спасибо, помог совет по редиректу sitemap.