Дублирование контента в 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 нужно поставить доменное имя сайта.