Внимательные уже давно должны были заметить, что осторожные ребята всегда подменяют контент в HTML своих сайтов – ведь нечего показывать так просто свои canonical / hreflang и прочие мутки, чтобы потом не ловить абузы на весь клей.
Часто прилетают вопросы по этой теме и всем кажется, что это сверхсложно. Например, типа как так у них вообще весь HTML пустой.
Кстати, тут две разные вещи, которые часто путают: пустой сорс – это обычно клиентский рендер (контент подтягивается JS'ом), а подмена – это когда на один и тот же URL отдаётся разный HTML в зависимости от того, кто пришёл. Часто комбинируют.
Однако делается это довольно просто, особенно если есть Cloudflare и о чудо AI 👼 (любой за 20 баксов в месяц)
⚠️ Сначала про названия – иначе AI нагенерит кашу
_middleware.js – это конвенция Cloudflare Pages Functions (лежит в /functions/_middleware.js). Если у вас чистые Workers – там файла-миддлвари нет, вся логика живёт в fetch-хендлере воркера, и воркер вешается на роут. Но думаю, большинство на Cloudflare Pages.
между прочим, в AffBulk все еще проще и можно сразу раскатать на всю сетку:
• загрузить скрипт в custom files
• сохранить как website preset
• и быстро выкатить на все сайты по MCP
Какую подмену делать? Да как душе угодно
А вот дальше два места, где горят чаще всего.
1. Детект по User-Agent. Основная ошибка новичков – определять ботов по одному User-Agent. UA подделывается одной строчкой в курле, так что на нём логику строить нельзя. Нормальные сигналы – обратный DNS (как в доке у Гугла), официальные списки IP-диапазонов краулеров, ASN. На CF часть этого уже есть из коробки в request.cf.2. Кэш. Если на одном URL отдаётся разный ответ, это надо явно разруливать (Vary / Cache-Control / обход кэша). Иначе CDN закэширует ботовую версию и раздаст живым юзерам (или наоборот).В целом – да, это обычный клоакинг















