Дублированные страницы — частая проблема сайтов на WordPress, которая негативно влияет на SEO и удобство пользователей. В этой статье разберём, как найти и удалить дублированные страницы без использования плагинов, используя чистый код и стандартные инструменты WordPress.
Почему важно удалять дублированные страницы
Дублированный контент мешает поисковым системам определить, какую страницу показывать в выдаче, что снижает рейтинг сайта. Кроме того, дубли могут запутать посетителей и размыть ссылочный вес. Удаление дублей помогает сфокусировать SEO и улучшить структуру сайта.
Основные источники дублей в WordPress:
- Несанкционированные копии страниц и записей
- Пагинация и архивы без правильной канонизации
- Параметры URL, создающие одинаковый контент
Как найти дублированные страницы вручную
Для начала нужно выявить дубли. Самый простой способ — использовать SQL-запросы к базе данных или экспорт контента в CSV для анализа.
Пример SQL-запроса для поиска страниц с одинаковыми заголовками:
SELECT post_title, COUNT(*) as count FROM wp_posts WHERE post_type = 'page' AND post_status = 'publish' GROUP BY post_title HAVING count > 1;Этот запрос покажет заголовки страниц, которые встречаются более одного раза. Аналогично можно проверять URL (post_name) или содержимое (post_content), но это более ресурсоёмко.
Ещё один способ — использовать поиск в админке по ключевым словам и сравнить результаты.
Удаление дублированных страниц через код
После выявления дублей можно автоматизировать их удаление с помощью PHP-скрипта, который безопасно удалит лишние страницы, оставив одну копию.
Пример функции для удаления дублей по заголовку, оставляя страницу с минимальным ID (то есть самой старой):
function wpmart_delete_duplicate_pages() {
global $wpdb;
$duplicates = $wpdb->get_results(
"SELECT post_title, MIN(ID) as keep_id, GROUP_CONCAT(ID) as all_ids, COUNT(*) as cnt
FROM {$wpdb->posts}
WHERE post_type = 'page' AND post_status = 'publish'
GROUP BY post_title
HAVING cnt > 1"
);
foreach ($duplicates as $dup) {
$ids = explode(',', $dup->all_ids);
foreach ($ids as $id) {
if ($id != $dup->keep_id) {
wp_delete_post($id, true); // принудительное удаление без корзины
}
}
}
}
// Запустите функцию один раз, например, через админский хук или WP-CLI
// wpmart_delete_duplicate_pages();Обязательно сделайте резервную копию базы данных перед запуском такого кода.
Как предотвратить появление дублей в будущем
Настройка канонических URL
Канонические ссылки говорят поисковикам, какая версия страницы основная. WordPress автоматически добавляет их, но иногда нужно исправить вручную или с помощью SEO-плагинов. Без плагинов можно добавить в functions.php следующую функцию:
function wpmart_add_canonical_tag() {
if (is_singular()) {
echo '<link rel="canonical" href="' . get_permalink() . '" />';
}
}
add_action('wp_head', 'wpmart_add_canonical_tag');Избегайте создания страниц с похожими URL
При создании страниц проверяйте уникальность слага (URL-части). Если вы дублируете контент, подумайте о 301 редиректах вместо создания новых страниц.
Использование robots.txt и мета-тегов noindex
Если есть страницы, которые не должны индексироваться, используйте мета-тег noindex или запрет на индексацию в robots.txt. Например:
User-agent: *
Disallow: /tag/
Disallow: /category/
Disallow: /author/
Для добавления noindex в отдельные страницы без плагинов можно использовать хук:
function wpmart_noindex_for_archives() {
if (is_tag() || is_category() || is_author()) {
echo '<meta name="robots" content="noindex,follow">';
}
}
add_action('wp_head', 'wpmart_noindex_for_archives');Рекомендации по работе с плагинами для SEO
Хотя мы рассмотрели способы без плагинов, иногда удобнее использовать специализированные решения. Например, Clearfy Pro помогает оптимизировать сайт и автоматически управлять каноническими URL, noindex и прочими SEO-настройками.
Также полезен WPCommunity — тема с хорошей SEO-оптимизацией, которая минимизирует дублирование страниц при генерации контента.