Как ограничить доступ к сайту только через поисковые системы

    Многие владельцы сайтов хотят защитить свой ресурс от прямых переходов, оставив его доступным только для посетителей из поисковиков (Яндекс, Google) и для самих поисковых ботов. Такая задача часто возникает при создании приватных баз данных, партнёрских сеток или временных лендингов. В этой статье разберём, как реализовать подобную фильтрацию с помощью Cloudflare, проверки HTTP-реферера и User-Agent.

    Принцип работы: реферер и User-Agent

    Когда пользователь переходит на сайт из поисковой системы, браузер передаёт HTTP-заголовок Referer, содержащий адрес поисковика (например, https://www.google.com/ или https://yandex.ru/). Поисковые боты (Googlebot, YandexBot) имеют специальный User-Agent. Сервер может анализировать эти данные и принимать решение: показать контент или вернуть ошибку (403, 404 или редирект).

    Настройка через Cloudflare Workers

    Cloudflare - популярный сервис CDN, который позволяет выполнять собственный код на границе сети. Используя Cloudflare Workers, вы можете перехватывать каждый запрос и проверять его происхождение. Вот пример простого скрипта:

    addEventListener('fetch', event => {
      event.respondWith(handleRequest(event.request))
    })
    
    async function handleRequest(request) {
      const referer = request.headers.get('Referer') || '';
      const userAgent = request.headers.get('User-Agent') || '';
      const allowedReferers = ['google.com', 'yandex.ru', 'bing.com'];
      const isBot = /bot|crawl|spider/i.test(userAgent);
    
      // Разрешаем ботам и переходам из поисковиков
      if (isBot || allowedReferers.some(r => referer.includes(r))) {
        return fetch(request);
      }
    
      // Иначе возвращаем ошибку 403
      return new Response('Access Denied', { status: 403 });
    }
    

    Этот код проверяет, пришёл ли пользователь с поисковика или является ботом. Если нет - отдаёт 403. Вы можете также настроить редирект на другой домен или поддомен, как в примере с seeddbaza.quest.

    Альтернативный способ: через .htaccess (Apache)

    Если ваш сайт работает на Apache, можно использовать файл .htaccess для проверки реферера:

    RewriteEngine On
    RewriteCond %{HTTP_REFERER} !^https?://(www\.)?google\. [NC]
    RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yandex\. [NC]
    RewriteCond %{HTTP_USER_AGENT} !(bot|crawl|spider) [NC]
    RewriteRule ^.*$ - [F,L]
    

    Эта директива блокирует всех, кто не пришёл с Google или Яндекса и не является ботом. Для Nginx аналогичная логика реализуется через блок if в конфигурации сервера.

    Важные нюансы и подводные камни

    • Реферер можно подделать - опытный пользователь может отправить запрос с подменённым заголовком. Это защита от случайных посетителей, а не от хакеров.
    • Поисковые боты могут не передавать реферер - поэтому в коде обязательно проверяйте User-Agent, иначе боты не увидят сайт.
    • Прямые переходы из закладок, мессенджеров или соцсетей будут заблокированы. Если вам нужно оставить доступ из соцсетей, добавьте их домены в список разрешённых.
    • Кеширование Cloudflare - если вы используете Workers, убедитесь, что кеш не отдаёт старую версию страницы для всех пользователей.

    Как работает пример с seeddbaza.quest

    В упомянутом примере при прямом вводе адреса сайт возвращает ошибку (вероятно, 403 или 404). При переходе из поисковика (Яндекс или Google) происходит редирект на сторонний поддомен. Это достигается комбинацией проверки реферера и правил переадресации на уровне Cloudflare Page Rules или Workers. Реферер от поисковика активирует редирект, а без него - блокировка.

    Проверка и отладка

    После настройки обязательно протестируйте работу: откройте сайт напрямую (должна быть ошибка), затем перейдите по ссылке из результатов поиска (должен открыться контент). Также используйте инструменты вроде curl с подменой реферера:

    curl -I -e 'https://www.google.com/' https://вашсайт.ру
    

    Убедитесь, что поисковые боты (например, через Google Search Console) видят сайт как рабочий и не получают ошибок.

    Заключение

    Настройка доступа к сайту только через поисковые системы - реальная задача, решаемая с помощью Cloudflare Workers, .htaccess или конфигурации Nginx. Главное - правильно комбинировать проверку реферера и User-Agent, чтобы не заблокировать сами поисковые боты. Помните, что это не абсолютная защита, но эффективный фильтр для массового трафика.

    Часто задаваемые вопросы