АнтиСео в MODX 2.4.0
Доброго времени суток, господа
Думаю не все в курсе (по крайней мере я не был) о том, что последние версии modx не корректно отрабатывают в связке в nginx ЧПУ (верней переадресацию при включении чпу).
В результате чего контент сайтацеликом дублируется в глазах поисковика и вы уныло катитесь вниз в выдаче.
Приведу простой пример:
Ваш сайт доступен по ссылке */index.php?id=1 и /, */index.php?id=2 и по чпу документа с id 2 и т.д.
К сожалению на modhost установлен nginx и я совершенно случайно обнаружил этот факт.
Василий предложил использовать плагин
Так же обратил внимание, что при включении этого плагина слетает выборка последних новостей (последние 3 дочерных документа у родителя по id).
Вот собственно вопрос:
как поставить проверку по содержанию /manager/ в url?
Почему может не работать pdoResources при включении этого плагина?
Думаю не все в курсе (по крайней мере я не был) о том, что последние версии modx не корректно отрабатывают в связке в nginx ЧПУ (верней переадресацию при включении чпу).
В результате чего контент сайта
Приведу простой пример:
Ваш сайт доступен по ссылке */index.php?id=1 и /, */index.php?id=2 и по чпу документа с id 2 и т.д.
К сожалению на modhost установлен nginx и я совершенно случайно обнаружил этот факт.
Василий предложил использовать плагин
<?php
if ($modx->event->name == 'OnHandleRequest') {
if (!empty($_GET['id'])) {
$id = (int)$_GET['id'];
if (!$modx->getCount('modResource', array('id' => $id, 'published' => 1, 'deleted' => 0))) {
$id = $modx->getOption('error_page', null, $modx->getOption('site_start'));
}
$modx->sendRedirect($modx->makeUrl($id));
}
}
На первый взгляд он закрывает эту дырку, но на практике получилось, что он ресолвит id и для страниц бэкенда, что убило его функционал.Так же обратил внимание, что при включении этого плагина слетает выборка последних новостей (последние 3 дочерных документа у родителя по id).
Вот собственно вопрос:
как поставить проверку по содержанию /manager/ в url?
Почему может не работать pdoResources при включении этого плагина?
Комментарии: 38
По поводу манагера и гет-параметров, проблему можно решить так:
<?php
if ($modx->event->name != "OnHandleRequest" || $modx->context->key == 'mgr') {
return;
}
if ($_SERVER['REQUEST_URI'] != '/') {
$uri = strtok(substr($_SERVER['REQUEST_URI'], 1), '?');
if ($uri == 'index.php') {
$uri = intval(str_replace('/index.php?id=', '', $_SERVER['REQUEST_URI']));
//не уверен, нужна ли здесь проверка на наличие ресурса, т.к. в случае отсутствия оного, событие должно перехватить OnPageNotFound
if(empty($uri)) {
$url = 1;
}
$modx->sendRedirect($modx->makeUrl($uri));
}
}
Проверка нужна, тк OnHandleRequest запускается до проверки существования ресурса.
Спасибо, на Apache работает)
Да это, блин, даже на IIS работать будет, потому что работает сам MODX, а не веб-сервер
Опять это «к сожалению на modhost установлен nginx», как будто где-то он сегодня не установлен, или на Apache2 такого поведения нет. Приведу ответ Василия из поддержки modhost.pro:
И
В плагине и правда нужно добавить проверку на $modx->context->key != 'mgr', тут я не доглядел.
P.S. Это АнтиСЕО началось с версии 2.3, насколько я могу судить. Это ж тысячи сайтов должны были просесть в выдаче.
Еще раз — какое отношение к вашей проблеме имеет хостинг? Почтайте, что ли, о ЧПУ. Её суть заключается в том, что запросы, которых реально нет на сервере отправляются на index.php с параметром.
То есть, если на сервере есть файл site.com/filename.txt, то nginx его отдаст сам. А если нет, то будет вызван
А дальше уже сам сайт определяет, что отдать на этот запрос — файл, редирект или 404./index.php?q=/filename.txt
Таким образом, при прямом запросе index.php?id=10 friendly urls и редиректы сервера не используются вообще. Движок получает команду показать 10ю страницу и сам её обрабатывает.
Версия MODX 2.2 при этом умела делать редиректы на канонический адрес. Новые версии, почему-то, перестали. Но каким образом за вас это должен исправлять хостинг — я отказываюсь понимать.
Откуда nginx вообще знает, какой именно адрес соответствуют 10 странице в MODX? Это знает только MODX. Ну и откуда у вас на сайте такие ссылки, чтобы к ним обращался поисковик — отдельный вопрос.
И
Покопался еще, и выяснил, что за это отвечает системная настройка request_method_strict, отключенная по умолчанию.
Правда, плагин всё равно лучше, потому что он редиректит куда надо, а настройка просто включает игнорирование неправильных запросов. Но, в любом случае, обвинять хостинг в вашей проблеме не стоит.
В плагине и правда нужно добавить проверку на $modx->context->key != 'mgr', тут я не доглядел.
P.S. Это АнтиСЕО началось с версии 2.3, насколько я могу судить. Это ж тысячи сайтов должны были просесть в выдаче.
Версия MODX 2.2 при этом умела делать редиректы на канонический адрес. Новые версии, почему-то, перестали. Но каким образом за вас это должен исправлять хостинг — я отказываюсь понимать.Есть сайт на 2.3.3 и Апаче, все работает.
Сам nginx может и не причем, но на MODX с nginx не работает.
Ну и откуда у вас на сайте такие ссылки, чтобы к ним обращался поисковик — отдельный вопрос.
Исторически присутствуют нативные ссылки разного рода. Сайт меняется, cms меняются, а ссылки лучше бы сохранять с редиректами.Это ж тысячи сайтов должны были просесть в выдаче.Измениться в выдаче. Они и меняются каждый ап, вопрос по какой причине.
Если проставить ссылок на идентичный контент на другой странице, то «правильная» страница будет иметь не уникальный контент.
Вопрос в том, что знает ли ПС о наличии этих альтернативных страниц. В нашем случае знает, так как есть ссылочное в этими урл исторически.
Ну так нужно настроить такие редиректы, нет?
Или они в .htaccess настроены, а тут нужно их под nginx переписать и вся проблема именно в этом? Действительно, залез в .htaccess, а там:
То есть, вся претензия к хостингу, MODX, SEO, nginx и прочему заключается в «Мы не знали, что у вас нет Apache2 и не читали раздел настройка веб-сервера»?!
Или они в .htaccess настроены, а тут нужно их под nginx переписать и вся проблема именно в этом? Действительно, залез в .htaccess, а там:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://sitename.ru [R=301,L]
Видимо таким образом Apache2 типа «сам» и делает редиректы — при их настройке, да.То есть, вся претензия к хостингу, MODX, SEO, nginx и прочему заключается в «Мы не знали, что у вас нет Apache2 и не читали раздел настройка веб-сервера»?!
Ох, епт.
Василий, у Вас хороший хостинг и претензий к нему нет, а есть проблема.
Не читал, но даже если бы читал ДО переезда, то о такой проблеме я не знал.
Василий, у Вас хороший хостинг и претензий к нему нет, а есть проблема.
Не читал, но даже если бы читал ДО переезда, то о такой проблеме я не знал.
Ну вот мы её, наконец-то, и нашли.
У тебя файл .htaccess на 25 килобайт с десятками хитрых правил, которые нужно как-то переписать для Nginx, или забить в компонент Redirector для MODX. После этого все редиректы вернутся и проблем с SEO больше не будет.
.htaccess работает только в Apache2, Nginx же рассчитан на более высокие нагрузки и не может себе позволить читать дополнительный файл при каждом запросе.
У тебя файл .htaccess на 25 килобайт с десятками хитрых правил, которые нужно как-то переписать для Nginx, или забить в компонент Redirector для MODX. После этого все редиректы вернутся и проблем с SEO больше не будет.
.htaccess работает только в Apache2, Nginx же рассчитан на более высокие нагрузки и не может себе позволить читать дополнительный файл при каждом запросе.
Я никогда не заморачивался на счет СЕО. Просто делал заголовки более менее и все. И никуда не упал. Даже поднимался)
Только Nginx тут действительно не причем.
Только Nginx тут действительно не причем.
Вы становились в топ-3 по ВЧ запросам (частотность от 10к) без заморочек на сео?
Если да, то покажите эту нишу с такой конкуренцией:)
Если да, то покажите эту нишу с такой конкуренцией:)
Я даже не понял что Вы сказали ))))))))))))))))))))
Просто я не лезу в СЕО. Главное контент )
Просто я не лезу в СЕО. Главное контент )
Вот прям-таки подпишусь под каждым словом! Я вообще считаю, что вот эта вот целая индустрия CEO, гребущая немалые деньги — сплошное надувательство. Если сайт с уникальным, востребованным контентом, на который ссылаются, который нужен посетителям, то сайт будет в топе выдачи с минимальными рекомендованными самими поисковиками настройками.
индустрия CEO, гребущая немалые деньги — сплошное надувательствоОптимизация оптимизации рознь. Есть «методы» продвижения от обманщиков для
Если чего-то не понимаешь — не нужно категорично заявлять, что этого нет или что это не работает. Это повседневная проблема нашего человека. То, что однажды ваш сайт попал в ТОП и продержался там недельку по НЧ (утрирую), не значит, что минимально указав какие-то моменты и проставив на него кучу ссылок с ГС у вас получилось продвинуть его не прибегая к услугам т.н. «профи в СЕО». Обычно даже если сайт в ТОП-3 по ВЧ — это не значит, что у него куча ссылок на морду или даже
Ещё раз повторю. Если чего-то не понимаешь — не нужно категорично заявлять, что этого нет или что это не работает.
А есть рабочие методы, вроде юзабилити причёсывания сайта для большего удобства пользователя, качественная проработка текста (это когда текст грамотно структурирован и разбит подзаголовками, лучше всего без воды), внедрения на сайт удобных функций (вроде калькулятора) и т.д.Ну и как это противоречит сказанному мной:
сайт с уникальным, востребованным контентом, на который ссылаются, который нужен посетителям
Если чего-то не понимаешь — не нужно категорично заявлять, что этого нет или что это не работает.Где же это я такое утверждал? Я говорил, что индустрия «профессиональной» поисковой оптимизации слишком раздута и во многом её востребованность притянута за уши.
Просто на нём есть, к примеру, очень удобная функция калькулятора для подсчёта цены на пластиковое окно или ещё что-то в этом духе.Опять же, это как раз то, о чем я и говорил. Основа всего — уникальный востребованный контент.
Надо понимать, что тот-же Яндекс в наше время умеет оценивать удобство сайтов по поведению пользователей на них (да, вы не поверите, но технологии в наше время доросли до такого уровня).Ну где же ты увидел, что я спорю с этим? Разумеется, удобство для пользователя — фактор, напрямую соперничающий с качеством контента. Если я ищу какую-то определенную информацию, но сайт при этом плюется всякими модальными окнами с предложением чего-нибудь полайкать, чудовищно выглядит на моем телефоне или имеет противоестественную навигацию — я уйду с него и не стану читать нужную мне информацию, поищу более удобную замену.
Только как это всё связано с «супер-профи» от СЕО и их ценниками — непонятно.
Индустрия сплошного надувательства?
Вы прям холи вар готовы объявить. Тогда Я.метрика — это панацея.
Контент не менялся, просто провели базовые работы, расширили семантику.
Как дальше конвертировать это все в деньги, уже второй вопрос. Но если Вы что-то продаете/торгуете в интернете и действительно считаете что оптимизация сайта это пустые слова, то вы теряете в продажах.
Вы прям холи вар готовы объявить. Тогда Я.метрика — это панацея.
Контент не менялся, просто провели базовые работы, расширили семантику.
Как дальше конвертировать это все в деньги, уже второй вопрос. Но если Вы что-то продаете/торгуете в интернете и действительно считаете что оптимизация сайта это пустые слова, то вы теряете в продажах.
Я не утверждал, что оптимизация не работает. Я говорил, что достаточно следовать рекомендациям самих поисковиков. Нет необходимости прибегать к услугам профессионалов СЕО, если на сайте есть нужный пользователям контент. Достаточно, как Вы написали, провести базовые работы, выполнить рекомендации поисковиков, которые, в целом, не сложны и вполне логичны.
Это как объявления о компьютерной помощи, которые массово расклеиваются в подъездах. «Установка программы — 200 р, удаление вируса — 500 р» и т.д. Это задачи для уровня рядового пользователя. Я же при этом не утверждаю, что эти «компьютерные мастера» не смогут реально установить программу. Смогут, скорее всего. Но это должен уметь делать любой пользователь ПК. Вы же не зовёте мастера, который запустит Вам стиральную машину на определённую программу или, например, включит мультиварку в нужном режиме.
Это как объявления о компьютерной помощи, которые массово расклеиваются в подъездах. «Установка программы — 200 р, удаление вируса — 500 р» и т.д. Это задачи для уровня рядового пользователя. Я же при этом не утверждаю, что эти «компьютерные мастера» не смогут реально установить программу. Смогут, скорее всего. Но это должен уметь делать любой пользователь ПК. Вы же не зовёте мастера, который запустит Вам стиральную машину на определённую программу или, например, включит мультиварку в нужном режиме.
Вы же не зовёте мастера, который запустит Вам стиральную машину на определённую программу или, например, включит мультиварку в нужном режиме.Мастера нет, а вот симпатичную мастерицу можно. :)
У всех свои предпочтения. =D
Кстати, если можно, включите в профиле личные сообщения- есть офф-топ вопррос, но не флудить же тут…
Переименуйте, пожалуйста, заголовок топика. Слишком уж он заманушный, да ещё и не в тему…
Кстати, весьма печалит, что запросы типа /index.php?id=131 при включенных friendly_urls и friendly_urls_strict вдруг стали работать (((
Версия 2.3.6… Ни чего хорошего в этом нет.
и правило
Версия 2.3.6… Ни чего хорошего в этом нет.
и правило
if ($request_uri ~* '^/index.php$') {
return 301 /;
}
тут не помогает
Почему это Вас печалит?
Сео это магия и шарлатаны:)
Я решил эту проблему на текущий момент плагином, который указан выше в комментариях, на первый взгляд проблему закрывает, если что-то еще вылезет, то отпишусь.
Сео это магия и шарлатаны:)
Я решил эту проблему на текущий момент плагином, который указан выше в комментариях, на первый взгляд проблему закрывает, если что-то еще вылезет, то отпишусь.
печалит, ибо в прежних версиях точно помню, /index.php?id=131 редиректило на чпу адрес. Я, конечно, в robots.txt запретил индексацию таких дублей, но…
Да, я не утверждал, что СЕО — шарлатанство, но соглашусь, что шарлатанов в данной области полно, видимо из-за некомпетентности потенциальных заказчиков.
Да, я не утверждал, что СЕО — шарлатанство, но соглашусь, что шарлатанов в данной области полно, видимо из-за некомпетентности потенциальных заказчиков.
Редиректило, я даже не проверял данный редирект по старой привычке и сильно удивился когда при снятии позиций вылезли урлы с ?id*
У меня такое на 2.3.6 По прежнему не рискую переходить на 2.4.2., т.к. в остальном все хорошо.
А в роботс не только index.php, но и все гет параметры запретил. Но это ужасно, что настройка friendly_urls_strict не работает :(
А в роботс не только index.php, но и все гет параметры запретил. Но это ужасно, что настройка friendly_urls_strict не работает :(
$modx->sendRedirect($url,array('responseCode' => 'HTTP/1.1 301 Moved Permanently')); В случае если дубли страницы уже были проиндексированы то лучше так сделать
Если ресолвить index.php?id*, то лучше всегда через 301.
т.е. чтобы плагин отдал 301 надо заменить
верно?
т.е. чтобы плагин отдал 301 надо заменить
$modx->sendRedirect($modx->makeUrl($uri));
на$modx->sendRedirect($url,array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
верно?
Все делается элементарно просто с помощью Атрибут rel=«canonical» тега
Как вариант
Кстати гугл и яндекс не гарантируют, что именно страница из каноникал будет выбрана роботом как основная. Это у них же в описании написано.
В тему доступности главной страницы по site.ru/index.php тут
<?php
if ($modx->event->name != "OnHandleRequest" || $modx->context->key == 'mgr') {
return;
}
if ($_SERVER['REQUEST_URI'] != '/') {
$R_URI=substr($_SERVER['REQUEST_URI'], 1);
if ($R_URI === 'index.php') $modx->sendRedirect('http://'.$_SERVER["SERVER_NAME"],array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
$uri = strtok(substr($_SERVER['REQUEST_URI'], 1), '?');
if ($uri == 'index.php') {
$uri = intval(str_replace('/index.php?id=', '', $_SERVER['REQUEST_URI']));
//не уверен, нужна ли здесь проверка на наличие ресурса, т.к. в случае отсутствия оного, событие должно перехватить OnPageNotFound
if(empty($uri)) {
$url = 1;
}
$modx->sendRedirect($modx->makeUrl($uri),array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
}
}
Страница index.php статична (ее урл имею ввиду), то ее легко можно закрыть правилом редиректа.
Про sendRedirect прочитал в документации, без доп. параметров он ставит 302 редирект, что не есть хорошо в нашей ситуации.
Но 301 редирект предложенный Вами не отрабатывал у меня, поэтому я написал полную запись
И если уже мы заговорили про canonical, то этот тег не гарантирует поведение ПС в выдаче, может и с тегом выйти в выдачу.
Эта проблема актуальна для страниц пагинации, например. Так как по умолчанию ставится только canonical на вторых и следующих страницах. (Я на этот счет даже писал Василию), корректно отрабатывать пагинацию через noindex, follow.
Про sendRedirect прочитал в документации, без доп. параметров он ставит 302 редирект, что не есть хорошо в нашей ситуации.
Но 301 редирект предложенный Вами не отрабатывал у меня, поэтому я написал полную запись
<?php
if ($modx->event->name != "OnHandleRequest" || $modx->context->key == 'mgr') {
return;
}
if ($_SERVER['REQUEST_URI'] != '/') {
$uri = strtok(substr($_SERVER['REQUEST_URI'], 1), '?');
if ($uri == 'index.php') {
$uri = intval(str_replace('/index.php?id=', '', $_SERVER['REQUEST_URI']));
//не уверен, нужна ли здесь проверка на наличие ресурса, т.к. в случае отсутствия оного, событие должно перехватить OnPageNotFound
if(empty($uri)) {
$url = 1;
}
$modx->sendRedirect($modx->makeUrl($uri), 0, 'REDIRECT_HEADER', 'HTTP/1.1 301 Moved Permanently');
}
}
Так все работает.И если уже мы заговорили про canonical, то этот тег не гарантирует поведение ПС в выдаче, может и с тегом выйти в выдачу.
Эта проблема актуальна для страниц пагинации, например. Так как по умолчанию ставится только canonical на вторых и следующих страницах. (Я на этот счет даже писал Василию), корректно отрабатывать пагинацию через noindex, follow.
Разве запись в robots.txt
Проверьте тестером.
Disallow: /index
не решает проблему дублей? Проверьте тестером.
Только в теории. Реалии от гугла:
А как правильно тогда?
Ну варианты есть разные. Роботс, 301, каноникал… Я бы после лишних действий со стороны поисковиков удостоверился, что как им не запрещай — они туда лезут. Думаю 301 это действительно железобетонное решение.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.