Небольшая «шпаргалка» самому себе по маскировке сети WordPress‑сайтов так, чтобы в HTML‑коде невозможно было обнаружить общий «футпринт». Разбил информацию на блоки, обозначил основные места, по которым можно вычислить сетку сайтов и показываю примеры кода.
В данный момент я разбираюсь с созданием PBN, а маскировка своей сети сайтов — это важный момент.
Я рекомендую использовать готовые плагины, которые я тоже указал в статье. Код оставим программистам, но для себя будем знать, что примерно делают плагины.
1. Самое главное: хостинг, DNS, CDN
Что видно снаружи | Как замаскироваться |
---|---|
IP‑адрес хостинга, PTR‑записи | Разносите сайты на разные хостинги, арендованные у разных провайдеров (или прикройте через Cloudflare, но используйте разные аккаунты). |
NS‑серверы | Если все сайты сделали на одном хостинге, то у всех сайтов будут одинаковые DNS сервера. Вместе с одинаковым внешним видом, это вызовет сильные подозрения |
Whois | Обязательно включить приватный режим у домена, чтобы не было видно кто владелец |
⟶ Это не HTML‑футпринты, но именно они чаще всего «сдают» сетку, когда анализируют PBN.
2. HTTP‑заголовки
- Server / X‑Powered‑By — переопределите в конфиге Nginx/Apache или через Cloudflare.
- Link: https://api.w.org/; rel=»https://api.w.org/» — убираем вместе с REST API (см. код ниже).
- X‑Pingback — отключается вместе с XML‑RPC.
3. HTML‑футпринты, создаваемые WordPress по умолчанию
3.1 Минимальный «must have» набор функций (файл functions.php
)
<!-- wp:code -->
<pre class="wp-block-code"><code>/* 1) Убираем метатег Generator и версию WP */
remove_action('wp_head', 'wp_generator'); //
add_filter('the_generator', '__return_false'); // fallback
/* 2) Удаляем REST API и oEmbed ссылки */
remove_action('wp_head', 'rest_output_link_wp_head', 10); //
remove_action('wp_head', 'wp_oembed_add_discovery_links', 10);
/* 3) Отключаем XML‑RPC, pingback и X‑Pingback */
add_filter('xmlrpc_enabled', '__return_false'); //
add_filter('wp_headers', function ($headers) {
unset($headers['X-Pingback']);
return $headers;
});
remove_action('wp_head', 'rsd_link'); // RSD
remove_action('wp_head', 'wlwmanifest_link'); //
/* 4) RSS/Atom, короткая ссылка и др. */
remove_action('wp_head', 'feed_links', 2);
remove_action('wp_head', 'feed_links_extra', 3);
remove_action('wp_head', 'wp_shortlink_wp_head', 10);
</code></pre>
<!-- /wp:code -->
Код добавляем в файл functions.php
3.2 Удаляем версии из CSS/JS‑URL
function no_ver_query_string( $src ){
return remove_query_arg( 'ver', $src );
}
add_filter( 'style_loader_src', 'no_ver_query_string', 15, 1 );
add_filter( 'script_loader_src', 'no_ver_query_string', 15, 1 );
Тем самым исчезают хвосты вида ?ver=6.5.2
, которые связывают площадки по времени обновлений.
3.3 Дополнительная чистка wp_head
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10); // rel prev/next
remove_action('wp_head', 'print_emoji_detection_script', 7); // emoji
remove_action('wp_print_styles', 'print_emoji_styles');
Полный список того, что WordPress пихает в <head>, удобно смотреть в консоли браузера
4. Плагины — готовые решения
Плагин | Что делает | Когда использовать |
---|---|---|
Perfmatters | В GUI убирает Generator, WLW, RSD, REST‑API, версии и т. д. | Если не хочется лезть в код; включайте разный набор опций на каждом сайте. |
Meta Generator & Version Info Remover | Чистит <meta name="generator"> и ?ver= из ресурсов. | Лёгкая альтернатива собственным хукам. |
Asset CleanUp / Clearfy / WP Hide | Фильтрация статики, смена путей к wp‑admin и wp‑login.php . | Полное «отбеливание» структуры URL. |
⚠️ Устанавливайте разные наборы плагинов/настроек, иначе сами создадите новый «футпринт».
5. Маскировка темы и плагинов
- Смените slug темы: переименуйте директорию и обновите заголовок в
style.css
. Тогда классclass="wp-block-button"
не выдаст одну и ту же тему на всех сайтах. - Удалите HTML‑комментарии вида
<!-- This theme is built on... -->
. - Перемешайте порядок подключаемых скриптов (например, отключите встроенный jQuery и подключите Slim либо спрятанный в
/assets/js/app.min.js
). - Используйте «одноразовые» фавиконки и разный
manifest.json
для PWA, если они генерируются темой.
6. Контент‑уровень (то, что видят боты)
- Файловая структура — не загружайте одни и те же изображения в нескольких проектах.
- Structured Data — не используйте одинаковые Organization/Logo в JSON‑LD.
- Аналитика — Отсутствие аналитики на сайтах всей сети — это футпринт. Большинство ПБН-щиков не ставят аналитику, но по хорошему надо ставить аналитику из разных аккаунтов Гугл.
7. Чеклист проверки кода
curl -I https://site.com
— проверьте Server, X‑Pingback, Link.- Правой кнопкой
view‑source:
— поиск по:generator
,wlwmanifest
,api.w.org
,wp-json
,rss
,ver=
. - BuiltWith / WhatCMS / Wappalyzer — видят ли WordPress?
- Screaming Frog (Bulk Export → All Outlinks) — одинаковые внешние id
- Сравните хэши favicon и sitemap.xml.
Итог
Если вы:
- Убрали служебные ссылки,
- Скрыли REST‑API, XML‑RPC, RSS, WLW, RSD, Generator, версии,
- разнесли сайты по разным IP и DNS, использовали разные темы, фавиконки, статические ресурсы,
…то будет сложно догадаться, что сайты принадлежает одному владельцу, сравнивая HTML-код. А именно по одинаковым блокам HTML-кода разные сервисы находят сайты принадлежащие одному вебмастеру.