добрый всем день,столкнулся с проблемой,что модекс дублирует контент страниц и как я понимаю для поисковиков это плохо. Вот,что нарыл на эту тему
http://www.mgordeev.ru/2009/11/robots/
вот текст статьи
Дублирование контента в MODx
Категория 28 ноября 2009 in 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: /*?
Host: yoursite.ru
Составленный таким образом файл robots.txt не позволит поисковому роботу проиндексировать дублирующиеся страницы 4-ого типа. Повторю, его можно использовать ТОЛЬКО для сайтов на ЧПУ. Для исключения остальных дублей надо немного исправить document.parser.class.inc.php. Этот файл содержит класс API и находится в /manager/includes/document.parser.class.inc.php.
После строки (примерно 1077) :
$this->documentIdentifier= $this->getDocumentIdentifier($this->documentMethod);
надо внести код :
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’)));
}
}
Этот код будет производить перенаправление с цифровых адресов не адреса-псевдонимы, если они есть.
Самая популярная ошибка:
При использовании ЧПУ часто забывают создать псевдоним для главной страницы сайта. Таким образом, создаются дубли самой главной страницы. Как их избежать(закрыть в 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 надо поставить доменное имя сайта.
предложенный автором вариант регулярного выражения по ошибке захватывал любой алиас который начинается с цифры и считал,что это ид и перенаправлял туда.
мой вариант выглядит так(плюс я там отсекаю несколько вариантов доступа к главной по псевдонимам)
preg_match(’/\/?(\d+)\/?$/’, $this->documentIdentifier, $res);
if ((substr($this->makeUrl($this->config["site_start"],’’, ’’, ’full’),-strlen($this->documentIdentifier)) == $this->documentIdentifier) || ($this->documentIdentifier == $this->config["site_start"].’/’) ){
$this->sendRedirect($this->config["site_url"], 0, ’REDIRECT_HEADER’, ’HTTP/1.1 301 Moved Permanently’);
}
elseif(intval($res[1])>1){
$this->sendErrorPage();
}
как вы считаете,целесообразно ли ставить подобные костыли в модекс? как можно исправить\дополнить\улучшит данный вариант на ваш взгляд?
PS пропустил фильтрацию страниц вида id.html они проходят