Дубли страниц категорий с category и без в WordPress
Сайт с установленным плагином All In One SEO 3.7.1 (пока не обновлялся до версии 4.0, какая-то она странная).
Заметил, что страница категории доступна по двум ссылкам:
//site/category/android/
//site/android/
В коде обеих страниц прописан canonical на //site/category/android/
Яндекс периодически индексирует страницы типа //site/android/
и затем выкидывает их из индекса как неканонические.
Поддержка Яндекса рекомендует настроить 301 редирект с //site/android/
на //site/category/android/
.
Подскажите, пожалуйста, как это грамотно сделать? Или лучше на страницах //site/android/
отдавать 404 ошибку?
В настройках All In One SEO ничего такого не нашел. Может есть смысла обновиться до 4 версии или перейти на Yoast SEO и проблема будет решена?
Буквально недавно задавали похожий вопрос и в ответе был дан рабочий скрипт для ликвидации дублей
https://wp-kama.ru/question/rubriki-dostupny-po-raznym-url-adresam
Спасибо! Но там немного другая проблема. Думаете подойдет решение?
Как это другая проблема, именно то о чем ты написал - категория отдается по разным URL. Там я предложил 301 редирект на правильный URL.
Все работает. Большое спасибо!
Столкнулся с проблемой. После подключения кода в functions.php редирект происходит, но перестала работать навигация по страницам в категориях. При попытке открыть
//site/category/android/page/2/
и т. д., страница просто обновляется и остается первая страница (//site/category/android/).Вам нужно добавить проверку is_paged() и если она true, то редиректить на соответствующую страницу архива.
И лучше, наверное, переписать условие с использованием функции strpos()
А как это интегрировать в код?
Не думаю, что только у меня данный код вызывает эту проблему.
Проверил на другом сайте - такая же проблема.
Здесь проверяется - есть ли вхождение относительной части ссылки на архив рубрики в обрабатываемом адресе и если нет, то формируется адрес редиректа.
Этого должно хватить.
Проверил, все работает как нужно. Спасибо!
Добавил исправленный вариант в оригинальный код. Спасибо Andrew.
Не работает, что если первая половина url = term_url, strpos = 0, в итоге мы так и останемся на неверном адресе