Дубли страниц в 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/
Михаил
22 марта 2015, 18:55
modx.pro
4
8 049
0

Комментарии: 30

Григорий Коленько
22 марта 2015, 23:51
0
А в чем проблема то?
    Михаил
    22 марта 2015, 23:56
    0
    поисковик видит две одинаковые страницы, «склеивает» их, в итоге в выдаче участвует одна по выбору того же Яндекса, а если весь сайт продублирован, то сайт получает весьма серьезный бан
      Григорий Коленько
      22 марта 2015, 23:59
      0
      Быть не может. Это равнозначные страницы. Банов еще не видел никаких
        Михаил
        23 марта 2015, 00:03
        0
        Давайте seo-полемику не будем тут начинать. Меня интересует то, что я спросил
          Владимир
          23 марта 2015, 01:23
          0
          Непосредственно в статьях, например scandinews.fi/kaleidoscope/2015/03/19/471-severnaya-evropa-k-zatmeniyu-gotova
          достаточно включить в настойках параметр friendly_urls_strict==1, и адрес со слэшем в конце редиректится на адрес без слэша. С контейнерами этого не происходит.
          С другой стороны, все контейнеры проиндексированы только в варианте со слэшем, как и есть в соответствии с параметром container_suffix==/
          Николай
          23 марта 2015, 08:19
          0
          Может. Я получил бан за такое.
            Николай
            23 марта 2015, 08:20
            0
        Василий Наумкин
        23 марта 2015, 06:40
        4
        +1
        Вот за что люблю SEO, так это за привычку утверждать без доказательств. Поэтому, сначала вопросы.

        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'));
        }
        Конечно, его нужно внимательно тестировать, но общее направление работ понятно.
          Михаил
          23 марта 2015, 12:32
          0
          Проблема действительно есть и в Яндексе в разделе «Страницы в поиске» стали появляться страницы без "/" в конце url. Правки в .htaccess не помогают.
          Плагин попробовал, но сразу же все пути были изменены и сайт стал грузиться без стилей, скриптов и картинок. Надо будет ближе к ночи им заняться.
            Николай
            23 марта 2015, 13:24
            0
            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 редирект на урл с / на конце.
              Михаил
              23 марта 2015, 14:02
              0
              Николай, конечно же я бы не стал задавать вопрос, не проверив очевидные вещи :)
              в том-то и дело, что
              RewriteCond %{REQUEST_FILENAME} !-f
              RewriteCond %{REQUEST_URI} !\..{1,10}$
              RewriteCond %{REQUEST_URI} !(.*)/$
              RewriteRule ^(.*)$ http://example.ru/$1/ [L,R=301]
              не добавляет / на сайте
          Дмитрий Иванов
          23 марта 2015, 13:26
          0
          по 3 пункту: кривые ссылки обычно оставляют на сторонних сайтах, оттуда поисковики по ним и приходят.
            Василий Наумкин
            23 марта 2015, 14:09
            0
            Установил этот плагин на modx.pro, с некоторыми правками — вроде работает.

            Проверяйте дубли теперь с удалением слешей.
              Михаил
              23 марта 2015, 14:15
              0
              да, на modx.pro работает!
              вариант с правками можно посмотреть?
                Василий Наумкин
                23 марта 2015, 15:00
                0
                Засылай 1000 рублей здесь, и получишь в ответ письмо с плагином и пояснением, как он работает.
                  Михаил
                  23 марта 2015, 15:01
                  0
                  уже разобрался, плагин работает
            Алексей Карташов
            25 марта 2015, 14:33
            1
            +2
            Хотел пройти мимо, но я не удержался :)


            Откуда вообще могут взяться дубли по 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 или онлайн сервисы.
              Василий Наумкин
              25 марта 2015, 15:57
              +1
              Но ты их не видишь, потому что на modx.pro неканонические урлы редиректят на канонические
              Это с 23го марта, как только нарисовал этот плагин.

              Наверное, Яндекс молниеносно нас переиндексировал и убрал все дубли, ага.

              Т.е. юридически вы разрешили яндексу индексацию личных кабинетов пользователей. Вот ведь какая ирония xD
              Насколько я вижу в описании
              Яндекс.Метрика может передавать URL страниц, на которых установлен счетчик Метрики, на индексацию Яндекс.Поиску.
              Никогда в этом и не сомневался. А ты утверждаешь, что он передаёт контент страниц?

              Если ты об этом случае — то там дырявые сайты, которые отдавали поисковику свой контент без авторизации.

              Вась, но я давно уже понял — в контексте seo ты судишь обо всех сайтах на основе своих собственных показателей, что в корне неверно — выборка-то нерепрезентативна! xD
              Ну а по чему мне судить, по миллиону статей об оптимизации в интернетах? Я по-прежнему считаю SEO наукой вроде «битвы экстрасенсов».

              «Нам кажется, что это работает так, щас мы вам настроим сайт. Ой, Яндекс сменил алгоритм и все вылетели из топа, давайте денег, мы еще раз настроим. Ой, а они всё время меняются, платите нам ежемесячно».

              Это моё личное мнение, сформированное под влиянием горе-оптимизаторов. Пару раз участвовал в переделке сайтов под идиотские требования сеошников — выхлопу ноль. Вообще, люди которые берут деньги за процесс, а не результат, сразу настораживают.

              Я не говорю, что все SEOшники такие, но вот такие — на виду.

              В конце концов, я хоть и поворчал, но после этого предложил рабочее решение. Даже проверил его, как обычно, на себе.

              P.S. А твоего комментария жду уже второй день. Опаздываешь!
                Алексей Карташов
                25 марта 2015, 18:07
                +1
                Наверное, Яндекс молниеносно нас переиндексировал и убрал все дубли, ага.
                На счёт переиндексации я тоже уверен на 99%, что её не было.
                Но здесь есть другие факторы. Если я их буду расписывать, то ты снова скажешь, что seo — это шаманство xD

                Никогда в этом и не сомневался. А ты утверждаешь, что он передаёт контент страниц?
                Если ты об этом случае — то там дырявые сайты, которые отдавали поисковику свой контент без авторизации.
                Оу. Мой косяк. Признаю был не прав.
                Но почему-то у меня прочно сидит в памяти картинка с раскрытым запросом в файрбаге одного из установленных счётчиков на каком-то сайте, у которого в теле запроса был контент всей страницы. Хз, почему в своей голове я связал это с метрикой. Но, повторюсь, ошибку признаю, ушёл в угол)

                Но, справедливости ради, стоит отметить, что яндекс.браузер юзает технологии оперы.турбо, пропуская весь пользовательский траффик через себя. Чтобы этот траффик сжимать. Ага-ага.
                Ставлю десятку, что по умолчанию эта функция в их браузере включена.
                Понятное дело, что с https это не прокатит, но ведь и https-сайтов в рунете не так много.

                Ну а по чему мне судить, по миллиону статей об оптимизации в интернетах? Я по-прежнему считаю SEO наукой вроде «битвы экстрасенсов».
                «Нам кажется, что это работает так, щас мы вам настроим сайт. Ой, Яндекс сменил алгоритм и все вылетели из топа, давайте денег, мы еще раз настроим. Ой, а они всё время меняются, платите нам ежемесячно».
                Я не говорю, что все SEOшники такие, но вот такие — на виду.
                Вот последняя фраза — ключевая.

                Кстати, по поводу того, за что должен платить клиент.
                Есть в ру-seo-мире такой персонаж как Арбайтен. Он эту тему раскрыл очень подробно.
                К слову, читая его статьи, нужно быть готовым к тому, что он делает кучу грамматических ошибок, много матерится и, самое главное, — к тому, что он принципиально делит мир на белое и чёрное, не давая шанса другим цветам радуги. Делает он это специально, чтобы его позиция дошла до большего количества людей и провоцируя аудиторию на дискуссию.
                Честное продвижение сайтов – единственное и неповторимое
                Какая мотивация и премиальные у сеошников при продвижении клиентских сайтов
                Самый эффективный вид продвижения сайта для клиента
                Продвижение сайта за процент от продаж – вся правда
                Продвижение сайта за процент с продаж – 2 часть
                Продвижение сайта на процент от продаж – ищем совместное решение
                Продвижение сайта за процент от продаж – Окончание

                В конце концов, я хоть и поворчал, но после этого предложил рабочее решение. Даже проверил его, как обычно, на себе.
                Я тоже предложил, только предлагал долго)

                P.S. Я твоего комментария жду уже второй день. Опаздываешь!
                Я же говорю, хотел пройти мимо, но не удержался))
                Но спасибо! С этой фразы в голос смеялся xD
              TITAN-UZ
              07 ноября 2015, 15:27
              0
              Как исключит страницы 404, 403 в плагине
                Anton
                25 декабря 2016, 17:43
                0
                С shopkeeper не дружит данный плагин. При добавлении товара в корзину крутит корзину бесконечно и не добавляет. В консоли браузера выдает internal server error. Может кто подскажет как допилить?
                  Viktor
                  08 мая 2018, 17:57
                  0
                  поменял событие OnLoadWebDocument на OnWebPagePrerender, работает нормально
                Дмитрий Иванов
                23 марта 2015, 13:32
                0
                В идеале, неплохо бы, что бы какой-нибудь крутой программер написал гибкий сео-компонент под модэкс, который будут уметь делать правильный canonical и прочие вкусности) под все приличные cms такие есть)
                  TITAN-UZ
                  23 марта 2015, 19:18
                  0
                  Вот тут я все описал по порядку SEO PAC
                  Надо уточнит цену у знатоков?
                  Алексей Карташов
                  25 марта 2015, 17:30
                  1
                  +1
                  Вот написал для вас ответ)
                  modx.pro/howto/5139-super-modx-strict-seo-accelerated-frontend/
                    Александр Н
                    14 июня 2015, 13:47
                    -1
                    Ещё один нюанс вскрылся)

                    Чем может грозить точка на конце доменного имени
                    habrahabr.ru/post/172999/
                      Антон Соловьёв
                      14 июня 2015, 19:37
                      0
                      Так в стандартном 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]
                      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                      30