Дубли страниц в MODX
Столкнулся с проблемой, которую вижу на сайтах MODX — дубли страниц со "/" в конце и без него. Сайты на Nginx и Apache. На modx.pro/ тоже. Пример:
Существует страница modx.pro/components/5081-mobiledetect-mobile-version-for-your-website и modx.pro/components/5081-mobiledetect-mobile-version-for-your-website/
Существует страница modx.pro/components/5081-mobiledetect-mobile-version-for-your-website и modx.pro/components/5081-mobiledetect-mobile-version-for-your-website/
Комментарии: 30
А в чем проблема то?
поисковик видит две одинаковые страницы, «склеивает» их, в итоге в выдаче участвует одна по выбору того же Яндекса, а если весь сайт продублирован, то сайт получает весьма серьезный бан
Быть не может. Это равнозначные страницы. Банов еще не видел никаких
Давайте seo-полемику не будем тут начинать. Меня интересует то, что я спросил
Непосредственно в статьях, например scandinews.fi/kaleidoscope/2015/03/19/471-severnaya-evropa-k-zatmeniyu-gotova
достаточно включить в настойках параметр friendly_urls_strict==1, и адрес со слэшем в конце редиректится на адрес без слэша. С контейнерами этого не происходит.
С другой стороны, все контейнеры проиндексированы только в варианте со слэшем, как и есть в соответствии с параметром container_suffix==/
достаточно включить в настойках параметр friendly_urls_strict==1, и адрес со слэшем в конце редиректится на адрес без слэша. С контейнерами этого не происходит.
С другой стороны, все контейнеры проиндексированы только в варианте со слэшем, как и есть в соответствии с параметром container_suffix==/
Может. Я получил бан за такое.
Вот за что люблю SEO, так это за привычку утверждать без доказательств. Поэтому, сначала вопросы.
1. Я не смог найти способ проверить наличие дублей, вообще. Все статьи в интернете больше походят на набор бабушкиных сплетен «зайдите в гугл, поищите так, а потом на яндекс, поищите эдак — видите, у вас разные результаты, значит у вас там где-то дубли!».
2. Если на сайте есть страницы, которые Яндекс исключил из поиска, наверное — он должен где-то их показывать? Не вижу
3. Откуда вообще могут взяться дубли по url, если этих url нигде нет? Ссылки на сайте выводятся как надо, в sitemap.xml — тоже. Яндекс сам при индексировании будет убирать слэш у контейнеров, что ли?
Ну а теперь ответы.
Friendly urls — это команды движку открыть какую-то страницу не по номеру, а по имени. Имя отправляется на запрос в index.php и он уже думает, какую страницу отдать. Так что, Apache2 и Nginx здесь сразу не при чём, работать нужно с движком сайта.
Для примера я набросал простой плагин, который сравнивает запрошенный адрес с каноническим для страницы, и если они не совпадают — делает 301 редирект.
1. Я не смог найти способ проверить наличие дублей, вообще. Все статьи в интернете больше походят на набор бабушкиных сплетен «зайдите в гугл, поищите так, а потом на яндекс, поищите эдак — видите, у вас разные результаты, значит у вас там где-то дубли!».
2. Если на сайте есть страницы, которые Яндекс исключил из поиска, наверное — он должен где-то их показывать? Не вижу
3. Откуда вообще могут взяться дубли по url, если этих url нигде нет? Ссылки на сайте выводятся как надо, в sitemap.xml — тоже. Яндекс сам при индексировании будет убирать слэш у контейнеров, что ли?
Ну а теперь ответы.
Friendly urls — это команды движку открыть какую-то страницу не по номеру, а по имени. Имя отправляется на запрос в index.php и он уже думает, какую страницу отдать. Так что, Apache2 и Nginx здесь сразу не при чём, работать нужно с движком сайта.
Для примера я набросал простой плагин, который сравнивает запрошенный адрес с каноническим для страницы, и если они не совпадают — делает 301 редирект.
<?php
if ($modx->event->name != 'OnLoadWebDocument') {return;}
$uri = $modx->resource->get('uri');
$request = ltrim(urldecode($_SERVER['REQUEST_URI']), '/');
if (strpos($request, '?') !== false) {
list($request, $params) = explode('?', $request);
}
else {
$params = '';
}
if (!empty($request) && mb_strtolower($request, 'UTF-8') != mb_strtolower($uri, 'UTF-8')) {
if (!empty($params)) {
$uri .= '?' . $params;
}
$modx->sendRedirect($uri, array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
}
Конечно, его нужно внимательно тестировать, но общее направление работ понятно.
Проблема действительно есть и в Яндексе в разделе «Страницы в поиске» стали появляться страницы без "/" в конце url. Правки в .htaccess не помогают.
Плагин попробовал, но сразу же все пути были изменены и сайт стал грузиться без стилей, скриптов и картинок. Надо будет ближе к ночи им заняться.
Плагин попробовал, но сразу же все пути были изменены и сайт стал грузиться без стилей, скриптов и картинок. Надо будет ближе к ночи им заняться.
php_flag register_globals Off
AddDefaultCharset utf-8
#php_value date.timezone Europe/Moscow
#Options +FollowSymlinks
RewriteEngine On
RewriteBase /
# Fix Apache internal dummy connections from breaking [(site_url)] cache
RewriteCond %{HTTP_USER_AGENT} ^.*internal\ dummy\ connection.*$ [NC]
RewriteRule .* - [F,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..{1,10}$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://example.ru/$1/ [L,R=301]
# without www all domian
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
# Exclude /assets and /manager directories and images from rewrite rules
RewriteRule ^(manager|assets|js|css|images|img)/.*$ - [L]
RewriteRule \.(jpg|jpeg|png|gif|ico)$ - [L]
# For Friendly URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
# Reduce server overhead by enabling output compression if supported.
#php_flag zlib.output_compression On
#php_value zlib.output_compression_level 5
Данный .htaccess делает 301 редирект на урл с / на конце.
Николай, конечно же я бы не стал задавать вопрос, не проверив очевидные вещи :)
в том-то и дело, что
в том-то и дело, что
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..{1,10}$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://example.ru/$1/ [L,R=301]
не добавляет / на сайте
Скопируйте себе все что я написал в .htaccess
Заменив все вообще что там есть. Т.к:
boomsport.ru/sports-nutrition/related-products/
boomsport.ru/sports-nutrition/related-products
Все ок.
Заменив все вообще что там есть. Т.к:
boomsport.ru/sports-nutrition/related-products/
boomsport.ru/sports-nutrition/related-products
Все ок.
спасибо, Николай
по 3 пункту: кривые ссылки обычно оставляют на сторонних сайтах, оттуда поисковики по ним и приходят.
Установил этот плагин на modx.pro, с некоторыми правками — вроде работает.
Проверяйте дубли теперь с удалением слешей.
Проверяйте дубли теперь с удалением слешей.
да, на modx.pro работает!
вариант с правками можно посмотреть?
вариант с правками можно посмотреть?
Засылай 1000 рублей здесь, и получишь в ответ письмо с плагином и пояснением, как он работает.
уже разобрался, плагин работает
Ну надо же!
Теперь всегда так буду делать.
Теперь всегда так буду делать.
Хотел пройти мимо, но я не удержался :)
habrahabr.ru/post/253943/
Нигде урлов на документы нет, но они всё-равно в индексе. Странно, да?)
Ссылки с сайтов — не единственный источник урлов для поисковых систем.
Была как-то пару лет назад история с метрикой примерно следующего содержания:
У какого-то крупного ресурса есть страницы закрытого раздела (типа личного кабинета). К этим страницам доступа без логина/пароля нет. Из вне отдавалась 403/401 (не суть).
Суть в том, что в индексе яндекса оказались тысячи страниц с личными кабинетами тысяч пользователей.
Т.е., понятное дело, что ссылки из выдачи яндекса вели на те самые закрытые разделы, которые для незалогиненного на этом сайте пользователя отдавали страницу входа (или типа того), но в кеше поисковика были полностью скопированные страницы личных кабинетов — с фио, адресами, историями покупок. Аааа! Вспомнил! Тема усугублялась тем, что то был не просто сайт, а магазин с интим-товарами xD
Тема ищется на хабре (мне лень искать, честно). Так вот, там, на хабре, начали копать и выяснилось, что в индекс попали только те из закрытых страниц, на которых была установлена яндекс.метрика. Оказывается яндекс молча решил отправлять в индекс то, что ему захочется, но вот всех остальных он об этом как-то забыл предупредить. На свои сервера он отправлял не просто урлы, а копии html, из-за чего случился тот самый казус.
После этой истории в настройках счётчика появилась опция включения запрета на индексацию: help.yandex.ru/metrika/code/stop-indexing.xml
К слову сказать, хитрожопый яндекс спрятал эту опцию в блоке «Дополнительно» (который в исходном состоянии «закрыт») и сделал её по умолчанию отключённой:
Что как бы намекает на то, что у тысяч, а может быть и у сотен тысяч пользователей, эта настройка останется выключенной и яндекс с чистой совестью продолжит индексировать то, что ему захочется.
А знаете, в чём прикол?
В том, что и на modx.pro, и на modstore.pro (в т.ч. в личном кабинете) — везде установлена метрика, у которой отключена эта настройка! Т.е. юридически вы разрешили яндексу индексацию личных кабинетов пользователей. Вот ведь какая ирония xD
Понятное дело, что яндекс с тех времён стал поумнее и страницы, которые не запрещено индексировать и при этом отдают 403/401/etc, — он в индекс не засунет.
Это, опять же, к слову о том, почему важны правильные коды ответов сервера и которые на том же fl.ru, скорей всего, были некорректно настроены из-за чего приватные документы и попали в индекс.
Однако это не говорит о том, что он эти данные не использует в своих бигдата и датамайнингах. К слову сказать, если ту настройку выключить, то всё-равно нет гарантии, что зыкрытые страницы не отправляются на сервера яндекса. В индекс-то они не попадут, да. Но вот данные о таких страницах яндекс может бережно складировать для дальнейшего анализа. Тут надо код метрики анализировать и пользовательское соглашение читать (чтобы быть уверенным либо нет), но кто это делает?
И вот в подтверждение моих слов — на modstore.pro метрике разрешено индексировать все страницы сайта. Но личный кабинет закрыт, все его страницы отдают 401 и поэтому этих страниц в индексе нет.
Кроме одной — страницы создания тикета в техподдержку modstore.pro/cabinet/tickets/ticket
Почему? Потому что она единственная из всех закрытых страниц отдаёт код 200 ОК. Поэтому и в индексе. Благо хоть в кеше лежит версия для неавторизованных пользователей, что вселяет надежду на то, что исходные коды html всё-таки не отправляются (хотя я бы не тешил себя иллюзиями).
Такая вот история.
Поэтому, +1 к источникам данных о страницах и их урлах для поисковиков.
Но есть и ещё один источник. Вы думаете гугл и яндекс пилят свои браузеры просто потому что могут? Ха!
Браузеры пилятся для абсолютно тех же целей — сбор максимально возможной информации о пользователях и сайтах. Вот только в браузерах никаких подобных настроек нет. Ну может быть есть что-то про отправку анонимной статистики, но я не проверял. Лиса — наше всё.
Поэтому у modx.pro дублей практически и нет.
Вась, но я давно уже понял — в контексте seo ты судишь обо всех сайтах на основе своих собственных показателей, что в корне неверно — выборка-то нерепрезентативна! xD
И если ты не сталкивался с подобными проблемами, это же не значит, что у других их нет, верно?)
Смысл в том, что советы действенные, вот только ручками особо не анализируешься. Поэтому такие советы автоматизируются. Для гугла, например, нужно собрать всё страницы в основном индексе, потом все страницы из «соплей» (supplemented index).
Да, у гугла 2 индекса — основной, который и есть основная выдача и дополнительный, в котором содержатся проиндексированные, но по какой-то причине не попавшие в осной индекс, страницы. Например из-за того, что это дубликат)
А потом оба этих массива анализируются по нескольким параметрам и выявляются дубли.
Но это плохой метод, анализ следствия ткскзать, а не причины. Для полного анализа дублей используются XENU, PageWeight или онлайн сервисы.
Откуда вообще могут взяться дубли по url, если этих url нигде нет?Вот прям в тему сегодняшняя статья:
habrahabr.ru/post/253943/
Нигде урлов на документы нет, но они всё-равно в индексе. Странно, да?)
Ссылки с сайтов — не единственный источник урлов для поисковых систем.
Была как-то пару лет назад история с метрикой примерно следующего содержания:
У какого-то крупного ресурса есть страницы закрытого раздела (типа личного кабинета). К этим страницам доступа без логина/пароля нет. Из вне отдавалась 403/401 (не суть).
Суть в том, что в индексе яндекса оказались тысячи страниц с личными кабинетами тысяч пользователей.
Т.е., понятное дело, что ссылки из выдачи яндекса вели на те самые закрытые разделы, которые для незалогиненного на этом сайте пользователя отдавали страницу входа (или типа того), но в кеше поисковика были полностью скопированные страницы личных кабинетов — с фио, адресами, историями покупок. Аааа! Вспомнил! Тема усугублялась тем, что то был не просто сайт, а магазин с интим-товарами xD
Тема ищется на хабре (мне лень искать, честно). Так вот, там, на хабре, начали копать и выяснилось, что в индекс попали только те из закрытых страниц, на которых была установлена яндекс.метрика. Оказывается яндекс молча решил отправлять в индекс то, что ему захочется, но вот всех остальных он об этом как-то забыл предупредить. На свои сервера он отправлял не просто урлы, а копии html, из-за чего случился тот самый казус.
После этой истории в настройках счётчика появилась опция включения запрета на индексацию: help.yandex.ru/metrika/code/stop-indexing.xml
К слову сказать, хитрожопый яндекс спрятал эту опцию в блоке «Дополнительно» (который в исходном состоянии «закрыт») и сделал её по умолчанию отключённой:
Что как бы намекает на то, что у тысяч, а может быть и у сотен тысяч пользователей, эта настройка останется выключенной и яндекс с чистой совестью продолжит индексировать то, что ему захочется.
А знаете, в чём прикол?
В том, что и на modx.pro, и на modstore.pro (в т.ч. в личном кабинете) — везде установлена метрика, у которой отключена эта настройка! Т.е. юридически вы разрешили яндексу индексацию личных кабинетов пользователей. Вот ведь какая ирония xD
Понятное дело, что яндекс с тех времён стал поумнее и страницы, которые не запрещено индексировать и при этом отдают 403/401/etc, — он в индекс не засунет.
Это, опять же, к слову о том, почему важны правильные коды ответов сервера и которые на том же fl.ru, скорей всего, были некорректно настроены из-за чего приватные документы и попали в индекс.
Однако это не говорит о том, что он эти данные не использует в своих бигдата и датамайнингах. К слову сказать, если ту настройку выключить, то всё-равно нет гарантии, что зыкрытые страницы не отправляются на сервера яндекса. В индекс-то они не попадут, да. Но вот данные о таких страницах яндекс может бережно складировать для дальнейшего анализа. Тут надо код метрики анализировать и пользовательское соглашение читать (чтобы быть уверенным либо нет), но кто это делает?
И вот в подтверждение моих слов — на modstore.pro метрике разрешено индексировать все страницы сайта. Но личный кабинет закрыт, все его страницы отдают 401 и поэтому этих страниц в индексе нет.
Кроме одной — страницы создания тикета в техподдержку modstore.pro/cabinet/tickets/ticket
Почему? Потому что она единственная из всех закрытых страниц отдаёт код 200 ОК. Поэтому и в индексе. Благо хоть в кеше лежит версия для неавторизованных пользователей, что вселяет надежду на то, что исходные коды html всё-таки не отправляются (хотя я бы не тешил себя иллюзиями).
Такая вот история.
Поэтому, +1 к источникам данных о страницах и их урлах для поисковиков.
Но есть и ещё один источник. Вы думаете гугл и яндекс пилят свои браузеры просто потому что могут? Ха!
Браузеры пилятся для абсолютно тех же целей — сбор максимально возможной информации о пользователях и сайтах. Вот только в браузерах никаких подобных настроек нет. Ну может быть есть что-то про отправку анонимной статистики, но я не проверял. Лиса — наше всё.
2. Если на сайте есть страницы, которые Яндекс исключил из поиска, наверное — он должен где-то их показывать? Не вижуКонечно должен. И как раз в вебмастере и показывает. Но ты их не видишь, потому что на modx.pro неканонические урлы редиректят на канонические, к примеру modx.pro/topic редиректит на modx.pro/topic/
Поэтому у modx.pro дублей практически и нет.
Вась, но я давно уже понял — в контексте seo ты судишь обо всех сайтах на основе своих собственных показателей, что в корне неверно — выборка-то нерепрезентативна! xD
И если ты не сталкивался с подобными проблемами, это же не значит, что у других их нет, верно?)
Я не смог найти способ проверить наличие дублей, вообще.Как-то ты плохо искал)
Все статьи в интернете больше походят на набор бабушкиных сплетен «зайдите в гугл, поищите так, а потом на яндекс, поищите эдак — видите, у вас разные результаты, значит у вас там где-то дубли!».И как обычно передёргиваешь)
Смысл в том, что советы действенные, вот только ручками особо не анализируешься. Поэтому такие советы автоматизируются. Для гугла, например, нужно собрать всё страницы в основном индексе, потом все страницы из «соплей» (supplemented index).
Да, у гугла 2 индекса — основной, который и есть основная выдача и дополнительный, в котором содержатся проиндексированные, но по какой-то причине не попавшие в осной индекс, страницы. Например из-за того, что это дубликат)
А потом оба этих массива анализируются по нескольким параметрам и выявляются дубли.
Но это плохой метод, анализ следствия ткскзать, а не причины. Для полного анализа дублей используются XENU, PageWeight или онлайн сервисы.
Но ты их не видишь, потому что на modx.pro неканонические урлы редиректят на каноническиеЭто с 23го марта, как только нарисовал этот плагин.
Наверное, Яндекс молниеносно нас переиндексировал и убрал все дубли, ага.
Т.е. юридически вы разрешили яндексу индексацию личных кабинетов пользователей. Вот ведь какая ирония xDНасколько я вижу в описании
Яндекс.Метрика может передавать URL страниц, на которых установлен счетчик Метрики, на индексацию Яндекс.Поиску.Никогда в этом и не сомневался. А ты утверждаешь, что он передаёт контент страниц?
Если ты об этом случае — то там дырявые сайты, которые отдавали поисковику свой контент без авторизации.
Вась, но я давно уже понял — в контексте seo ты судишь обо всех сайтах на основе своих собственных показателей, что в корне неверно — выборка-то нерепрезентативна! xDНу а по чему мне судить, по миллиону статей об оптимизации в интернетах? Я по-прежнему считаю SEO наукой вроде «битвы экстрасенсов».
«Нам кажется, что это работает так, щас мы вам настроим сайт. Ой, Яндекс сменил алгоритм и все вылетели из топа, давайте денег, мы еще раз настроим. Ой, а они всё время меняются, платите нам ежемесячно».
Это моё личное мнение, сформированное под влиянием горе-оптимизаторов. Пару раз участвовал в переделке сайтов под идиотские требования сеошников — выхлопу ноль. Вообще, люди которые берут деньги за процесс, а не результат, сразу настораживают.
Я не говорю, что все SEOшники такие, но вот такие — на виду.
В конце концов, я хоть и поворчал, но после этого предложил рабочее решение. Даже проверил его, как обычно, на себе.
P.S. А твоего комментария жду уже второй день. Опаздываешь!
Наверное, Яндекс молниеносно нас переиндексировал и убрал все дубли, ага.На счёт переиндексации я тоже уверен на 99%, что её не было.
Но здесь есть другие факторы. Если я их буду расписывать, то ты снова скажешь, что seo — это шаманство xD
Никогда в этом и не сомневался. А ты утверждаешь, что он передаёт контент страниц?Оу. Мой косяк. Признаю был не прав.
Если ты об этом случае — то там дырявые сайты, которые отдавали поисковику свой контент без авторизации.
Но почему-то у меня прочно сидит в памяти картинка с раскрытым запросом в файрбаге одного из установленных счётчиков на каком-то сайте, у которого в теле запроса был контент всей страницы. Хз, почему в своей голове я связал это с метрикой. Но, повторюсь, ошибку признаю, ушёл в угол)
Но, справедливости ради, стоит отметить, что яндекс.браузер юзает технологии оперы.турбо, пропуская весь пользовательский траффик через себя. Чтобы этот траффик сжимать. Ага-ага.
Ставлю десятку, что по умолчанию эта функция в их браузере включена.
Понятное дело, что с https это не прокатит, но ведь и https-сайтов в рунете не так много.
Ну а по чему мне судить, по миллиону статей об оптимизации в интернетах? Я по-прежнему считаю SEO наукой вроде «битвы экстрасенсов».
«Нам кажется, что это работает так, щас мы вам настроим сайт. Ой, Яндекс сменил алгоритм и все вылетели из топа, давайте денег, мы еще раз настроим. Ой, а они всё время меняются, платите нам ежемесячно».
Я не говорю, что все SEOшники такие, но вот такие — на виду.Вот последняя фраза — ключевая.
Кстати, по поводу того, за что должен платить клиент.
Есть в ру-seo-мире такой персонаж как Арбайтен. Он эту тему раскрыл очень подробно.
К слову, читая его статьи, нужно быть готовым к тому, что он делает кучу грамматических ошибок, много матерится и, самое главное, — к тому, что он принципиально делит мир на белое и чёрное, не давая шанса другим цветам радуги. Делает он это специально, чтобы его позиция дошла до большего количества людей и провоцируя аудиторию на дискуссию.
Честное продвижение сайтов – единственное и неповторимое
Какая мотивация и премиальные у сеошников при продвижении клиентских сайтов
Самый эффективный вид продвижения сайта для клиента
Продвижение сайта за процент от продаж – вся правда
Продвижение сайта за процент с продаж – 2 часть
Продвижение сайта на процент от продаж – ищем совместное решение
Продвижение сайта за процент от продаж – Окончание
В конце концов, я хоть и поворчал, но после этого предложил рабочее решение. Даже проверил его, как обычно, на себе.Я тоже предложил, только предлагал долго)
P.S. Я твоего комментария жду уже второй день. Опаздываешь!Я же говорю, хотел пройти мимо, но не удержался))
Но спасибо! С этой фразы в голос смеялся xD
Как исключит страницы 404, 403 в плагине
С shopkeeper не дружит данный плагин. При добавлении товара в корзину крутит корзину бесконечно и не добавляет. В консоли браузера выдает internal server error. Может кто подскажет как допилить?
поменял событие OnLoadWebDocument на OnWebPagePrerender, работает нормально
В идеале, неплохо бы, что бы какой-нибудь крутой программер написал гибкий сео-компонент под модэкс, который будут уметь делать правильный canonical и прочие вкусности) под все приличные cms такие есть)
Вот тут я все описал по порядку SEO PAC
Надо уточнит цену у знатоков?
Надо уточнит цену у знатоков?
Вот написал для вас ответ)
modx.pro/howto/5139-super-modx-strict-seo-accelerated-frontend/
modx.pro/howto/5139-super-modx-strict-seo-accelerated-frontend/
Так в стандартном htaccess же
#RewriteCond %{HTTP_HOST} .
#RewriteCond %{HTTP_HOST} !^www\.example-domain-please-change\.com [NC]
#RewriteRule (.*) http://www.example-domain-please-change.com/$1 [R=301,L]
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.