Убрать URL языка на главной странице: WordPress+Polylang
WordPress+Polylang
Как можно убрать URL языка по умолчанию только на главной странице?
Например, как должно быть:
Сайт на 2 языках. Русский язык стоит по умолчанию
site.com – (ru скрыто, это главная страница) site.com/ru/contacts – (ru показано) site.com/ru/news – (ru показано) site.com/en/ – (en показано) site.com/en/contacts – (en показано) site.com/en/news – (en показано)
В настройках плагина можно скрыть префикс только всех страницы языка по умолчанию. А в моем случае нужно скрыть только главную страницу. Сейчас у главной страницы есть префикс языка site.com/ru/ и Google показывает ошибку "Канонические версии страницы, выбранные Google и пользователем, не совпадают."
Старый зверь, надо смотреть... а если попробовать в .htaccess
сделать?
RewriteCond %{REQUEST_URI} !^/(ru|en)/$ [NC] RewriteRule ^$ /ru/ [L,R=301]
Но лучше Polylang покопать, там должны быть фильтры или хуки которые с префиксом взаимодействуют
- Попробовал сделать редирект от Дана Закирова, но не помогло.
- Написал разработчикам плагина, но получил от них отрицательный ответ:
"With Polylang it is not possible to only hide for the front. However, if you are a developer or know one that can help, it might be possible to achieve what you are looking for. As per today, we do not offer any custom services, It will be the same result with Polylang Pro. You would need to filter on get_home_url() with the filter home_url."
я сегодня вечером смогу посмотреть

В поле "Hide URL language information for default language" отсутствует галочка, поскольку отключится префикс у всех страниц, а нужно отключение только для главной страницы. Остальные настройки одинаковы.
Нашел рабочий способ отключить url любой страницы кроме префикса языка:
function filter_pll_check_canonical_url( $redirect_url, $language ) { if($redirect_url === 'https://site.com/ru/news/'){ $redirect_url = str_replace('/news/', '/', $redirect_url); } return $redirect_url; } add_filter( 'pll_check_canonical_url', 'filter_pll_check_canonical_url', 10, 2 );
После этого кода ссылка https://site.com/ru/news/
станет https://site.com/ru/
Но если такое проделать с префиксом языка, получаю белую недоступную страницу с множеством перенаправлений.
Также забыл написать, что данный способ позволяет скрыть префикс языка любой страницы, но только не главной.
Я милиард вариантов перебрал, пока в пустую. Буду дальше думать.
Тут еще надо иметь ввиду, что допустим даже получится убрать префикс языка для главной и вроде как оно работает на первый взгляд, но потом могут всплыть (и очень вероятно что всплывут) баги.
Суть проблемы тут в том, что как и ответила поддержка там глобально изменяется результат функции get_home_url() через home_url. А эта функция используется о-очень много где. И ловить там баги с подобным исключением можно до бесконечности наверное.
Поддержка просто отписалась. А суть проблемы состоит в том, чтобы не просто убрать префикс языка с урла, а чтобы главная каноническая страница была site.com и не было дубля site.com/ru/
На эту ошибку и указывает гугл: ""Канонические версии страницы, выбранные Google и пользователем, не совпадают."
То есть физически создана только одна страница, а гугл находит две. Одну по адресу site.com и вторую по адресу site.com/ru/ . На мой взгляд это баг плагина, но разработчиков почему-то это не беспокоит.
А в метатеге canonical что сейчас на главной? И что сейчас происходит если перейти на https:://site.com
?
В метатеге canonical сейчас https://site.com/ru/
Если перейти на https:://site.com то откроется https://site.com/ru/
Если в админке в настройках страницы (с помощью сео плагина) прописать canonical https://site.com/
, то появится еще одна ошибка, что hreflang неверный и Google pagespeed insight сразу за это на 10% снижает показатели
Я что-то уже запуутался. Вы какую проблему пытатесь решить? Если сейчас и старница отркывается только по https://site.com/ru/
и в каноникал https://site.com/ru/
и без префикса редиректит на https://site.com/ru/
. Чего Гугл то ругается, на что он ругается?
Я что-то уже запуутался. Вы какую проблему пытатесь решить? Если сейчас и старница отркывается только по https://site.com/ru/ и в каноникал https://site.com/ru/ и без префикса редиректит на https://site.com/ru/. Чего Гугл то ругается, на что он ругается?
Я думал автор сначала хочет убрать просто префиксы с урлов ru
и en
, я поставил тестовый сайт, перебрал массу вариантов и хуков, которые используются в плагине. Не так то просто их убрать. Но сейчас я как понимаю, автор хочет и префиксы спилить и каноктикал линки переделать. По каноктикал в плагине есть отдельные хуки и фильтры, но в итоге я сам запутался))
Я раньше с Polylang работал, но пришел к выводу, что этот зверь не торт. Особенно он начинает буксовать на таксах, когда их много. Мне кажется проще через мультисайт языки замутить, ручками, чем на Polylang. Он в самом начале только хорош, его установил и почти ничего настраивать то не надо. Потом я отказался от него и начал на WPML пилить, один сайт через мультиязык сделал и забыл как страшный сон этот Polylang.
Но как говорится, хреновому танцору... Задачу то эту по любому можно решить
Гугл: "Канонические версии страницы, выбранные Google и пользователем, не совпадают."
Гугл: "Канонической должна быть страница site.com, а на сайте каноническая страница site.com/ru/"
Гугл: "страница site.com/ru/ является копией site.com/ и не индексируется"
Физически создана только одна страница, а гугл находит две. Одну по адресу site.com и вторую по адресу site.com/ru/ . При попытке прописать canonical https://site.com/ появляется еще одна ошибка, что hreflang неверный.
А префикс en не нужно убирать, с английской версией всё в порядке.
Написал подробно еще раз в поддержку про баг в плагине. Мне ответили, что вопросом занимаются, но неизвестно когда выйдет новый релиз плагина с исправлениями, поскольку проблему не решить несколькими строчками кода, нужно переписывать весь функционал плагина, опирающийся на главную страницу.
Есть в плагине фильтры которые с каноническими линками взаимодействуют. Завтра постараюсь посмотреть.
Канонической должна быть страница site.com
Интересно почему именно она должна быть канонической.
Гугл обнаружил 2 страницы site.com и site.com/ru/ . Как пишет гугл в своей справке ( https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls?hl=ru. ), канонические страницы выбираются по ряду критериев, также называемых сигналами. Примеры сигналов: протокол (HTTP или HTTPS), качество страницы, упоминание URL в файле Sitemap, а также наличие атрибута rel=canonical. Даже если вы укажете каноническую страницу самостоятельно, мы по той или иной причине можем выбрать другую.
Выбор гуглом канонической страницы site.com выглядит логичным. А вот появление копии страницы из-за плагина и вызывает проблему. Была бы только одна страница вместо двух, гугл выбрал бы эту страницу и на этом всё закончилось.
Выбор гуглом канонической страницы site.com выглядит логичным.
Вообще не логично. Для гугла такой страницы вообще не должно существовать! Если она существует - это косяк который нужно поправить. Т.е.
- site.com должен редиректить на site.com/ru/ c 301 статусом.
- site.com не должно быть в карте сайта.
- site.com не должно быть в теге canonical.
Если это все так, то откуда вообще гугл взял страницу site.com, если её просто нет? Это ппц как нелогично!
site.com - нет в карте сайта
site.com/ru/ - в карте сайта и теге canonical
Плагин Полиланг создал копию site.com страницы site.com/ru/
А гугл считает site.com как каноническую страницу, а страницу site.com/ru/ считает копией.
Выход есть: поставить галочку в настройках плагина "Hide URL language information for default language" . Все префиксы русские исчезают со всех русских страниц и остается ОДНА страница site.com без дубля и ее гугл (что логично) считает канонической.
Если опять галочку убрать, появляются опять дубли главной страницы. Отсюда следует, что в плагине косяк.
Может перейдете на WPML? меньше проблем будет
Для остальных русских страниц у которых забрали префикс, можно прописать 301 редирект и как-нибудь уговорить владельца сайта на отсутствие префиксов в русской версии, раз не выходит решить проблему с плагином.
Кстати, способ
function filter_pll_check_canonical_url( $redirect_url, $language ) { if($redirect_url === 'https://site.com/ru/news/'){ $redirect_url = str_replace('/news/', '/', $redirect_url); } return $redirect_url; } add_filter( 'pll_check_canonical_url', 'filter_pll_check_canonical_url', 10, 2 );
позволяет не только удалять префикс для не главной страницы, но и добавлять префикс.
но сам префикс ru он не удаляет да?
А 301 редирект сча есть с site.com на site.com/ru/? Он должен быть (и по идее этим должен заниматься плагин).
Не простой вопрос я полагаю. С Polylang давно не работал, но вообще это нетрифиальная задача, если в плагине такой функции нет, там подводных камней куча.
Если получится решить, скиньте сюда решение пожалуйста.