В 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 с использованием ЧПУ:
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) :
[sourcecode lang="php"] $this->documentIdentifier= $this->getDocumentIdentifier($this->documentMethod); [/sourcecode]
надо внести код :
[sourcecode lang="php"] preg_match('/[0-9]*/', $this->documentIdentifier, $res); asort($res); if (intval($res[0])>0){ if (!preg_match('/\/[0-9]{1,}/', ($this->makeUrl($res[0], '', '', 'full')))){ header ('HTTP/1.1 301 Moved Permanently'); header("Location: ".($this->makeUrl($res[0], '', '', 'full'))); } } [/sourcecode]
Этот код будет производить перенаправление с цифровых адресов на адреса-псевдонимы, если они есть.
Самая популярная ошибка:
При использовании ЧПУ часто забывают создать псевдоним для главной страницы сайта. Таким образом, создаются дубли самой главной страницы. Как их избежать (закрыть в robots или сделать редирект) — необходимо решать индивидуально для каждого сайта, общего решения пожалуй что нет.
Также существует дублирование контента из-за добавления слешей в конец адреса. В Modx эту проблему можно решить, настроив особым образом .htaccess.
Если на сайте используются суффиксы для URL (по умолчанию .html), в .htaccess надо добавить строки:
RewriteRule ^(.*)\.html[/]+$ $1.html [L,R=301]
В коде .html надо заменить на тот суффикс, который используется на сайте.
Если суффикс для сайта пустой, то необходимо привести все урлы «site.ru/doc/» к типу «site.ru/doc». Это делается в .htaccess:
RewriteRule ^(.*)[/]+$ $1 [L,R=301]
Но, на мой взгляд, лучше установить суффикс «/» и привести все урлы «site.ru/doc» к типу «site.ru/doc/»:
RewriteRule ^.+[^/]$ http://www.site.ru%{REQUEST_URI}/ [L,R=301]
Для того, чтобы исключить дублирование карт сайта, т.е. поставить редирект с sitemap.xml.html на sitemap.xml в .htaccess, надо добавить строки:
RewriteRule ^(.*)\.xml\.html$ $1.xml [L,R=301]
Вместо site.ru нужно поставить доменное имя сайта.