• /
  • /

Как защитить сайт от копирования в России в 2025 году

Обновлено: 29.09.2025 ▪ 14 мин чтения
Как защитить сайт от копирования в России в 2025 году
Вы делаете сайт, платите авторам, публикуете статьи и фото. Через неделю открываете аналитику — и видите копии на чужих страницах. Первая реакция — выключить правую кнопку и горячие клавиши. Это не спасёт. Блоки мешают честным читателям и останавливают только новичков. Опытный человек снимет контент за минуту.

Эта статья даёт рабочий план для сайтов из России. Мы укрепим авторство до публикации, ускорим индексацию, сделаем копирование дорогим без вреда для UX и настроим автоматические сигналы о кражах.

Юрист, эксперт по правовым вопросам

Как понять, что у вас воруют

Идите по шагам, собирайте улики. В конце у вас будет пакет, с которым вы быстро снимете копии.

1. Включите запись сессий и события

Сначала заставьте аналитику видеть копирование.

Для этого включите «Вебвизор» и карты кликов/скролла в Яндекс.Метрике. И добавьте конкретные события:
  • copy_large — скопирован фрагмент >100 символов;
  • context_image — правый клик по изображению;
JS-сниппет для Яндекс.Метрики: фиксирует копирование текста >100 символов и правый клик по изображению. Отправляет события copy_large и context_image в счётчик
<script>
  (function () {
    // ЗАМЕНИТЕ на ваш ID Метрики
    var YM_ID = 12345678;

    // --- copy_large: копирование текста > 100 символов ---
    var lastCopyAt = 0;
    document.addEventListener('copy', function () {
      try {
        // игнорируем копирование из input/textarea/contenteditable
        var ae = document.activeElement;
        if (ae && (ae.tagName === 'INPUT' || ae.tagName === 'TEXTAREA' || ae.isContentEditable)) return;

        var txt = (window.getSelection && (window.getSelection().toString() || '')) || '';
        var len = (txt || '').trim().length;

        // антидребезг: не чаще 1 раза в 3 сек
        var now = Date.now();
        if (len >= 100 && now - lastCopyAt > 3000) {
          lastCopyAt = now;
          if (typeof ym === 'function') {
            ym(YM_ID, 'reachGoal', 'copy_large', {
              length: len,
              page: location.pathname
            });
          }
        }
      } catch (e) {}
    }, false);

    // --- context_image: правый клик по изображению ---
    document.addEventListener('contextmenu', function (e) {
      try {
        var el = e.target;
        // IMG или блок с фоном-изображением (часто встречается в Tilda)
        var isImgTag = el && el.tagName === 'IMG';
        var hasBg = el && window.getComputedStyle(el).backgroundImage !== 'none';

        if (isImgTag || hasBg) {
          var src = isImgTag ? (el.currentSrc || el.src || '') : window.getComputedStyle(el).backgroundImage;
          if (typeof ym === 'function') {
            ym(YM_ID, 'reachGoal', 'context_image', {
              src: src.slice(0, 300), // ограничим длину
              page: location.pathname
            });
          }
        }
      } catch (e) {}
    }, false);
  })();
</script>

2. Отфильтруйте «подозрительных»

Нам нужен отдельный вид.

Для этого создайте сегмент «Подозрительный» с правилами:
  • за сессию ≥3 события copy_large или context_image;
  • за 60 секунд прокрутка >80% длинной страницы;
  • подряд открыто или скачано ≥3 изображения.
Нажмите «Проверить». Подождите завершения. Откройте список совпадений: там будут URL, процент совпадения, подсветка фраз
«Вебвизор с фильтром по пользовательским целям copy_large и context_image

Способ 1. Добавляйте ссылку на источник при копировании

Когда читатель выделяет абзац и жмёт Ctrl+C, вы добавляете к скопированному тексту хвост:

Источник: https://ваш-домен.ru/страница.

Часть копий уезжает уже с активной ссылкой на вас. Это самый «мягкий» барьер: он не мешает читать и делиться цитатами, но помечает ваши тексты.
Вот готовый универсальный скрипт. Он добавляет к копируемому фрагменту хвост с ссылкой на первоисточник. Работает на любом сайте, не ломает короткие цитаты, поддерживает и «обычный текст», и форматированный HTML.

Вставьте его перед </body> (или в общий файл скриптов).
Когда кто-то копирует большой кусок текста с вашей страницы, скрипт сам дописывает в конец: “Источник: ссылка на эту страницу”. Ссылка чистая (без UTM).
<script>
(function () {
  // ── настройки ───────────────────────────────────────────────
  var MIN_CHARS = 120;                   // порог: короче — хвост не добавляем
  var LABEL     = 'Источник:';           // подпись перед ссылкой
  var EXCLUDE_SELECTOR = '[data-nocopy]';// элементы, внутри которых хвост не добавляем
  // ────────────────────────────────────────────────────────────

  function getCleanUrl() {
    // 1) если есть <link rel="canonical"> — используем его
    var link = document.querySelector('link[rel="canonical"]');
    if (link && link.href) return link.href;

    // 2) иначе берём текущий URL без якоря и трекинга
    var url = new URL(location.href);
    url.hash = '';
    // чистим самые частые метки
    ['utm_source','utm_medium','utm_campaign','utm_term','utm_content','fbclid','gclid','yclid','_openstat'].forEach(function (p) {
      url.searchParams.delete(p);
    });
    return url.toString();
  }

  function selectionContainsExcluded(sel) {
    if (!sel || sel.rangeCount === 0) return false;
    var range = sel.getRangeAt(0);
    var common = range.commonAncestorContainer.nodeType === 1
      ? range.commonAncestorContainer
      : range.commonAncestorContainer.parentElement;
    return !!(common && common.closest && common.closest(EXCLUDE_SELECTOR));
  }

  function getSelectionText(sel) {
    return (sel && sel.toString ? sel.toString() : '') || '';
  }

  function getSelectionHtml(sel) {
    if (!sel || sel.rangeCount === 0) return '';
    var container = document.createElement('div');
    for (var i = 0; i < sel.rangeCount; i++) {
      container.appendChild(sel.getRangeAt(i).cloneContents());
    }
    return container.innerHTML;
  }

  function buildTail(url) {
    // HTML-хвост
    var html = '<p style="margin-top:1em; font:inherit; color:inherit;">' +
               LABEL + ' <a href="' + url + '">' + url + '</a></p>';
    // Текстовый хвост
    var text = '\n\n' + LABEL + ' ' + url;
    return { html: html, text: text };
  }

  document.addEventListener('copy', function (e) {
    var sel = window.getSelection();
    if (!sel || sel.rangeCount === 0) return;
    if (selectionContainsExcluded(sel)) return;

    var text = getSelectionText(sel);
    if (text.replace(/\s+/g, ' ').trim().length < MIN_CHARS) return;

    var url  = getCleanUrl();
    var tail = buildTail(url);

    // Собираем HTML: оригинал + хвост
    var htmlOriginal = getSelectionHtml(sel);
    var htmlCombined = htmlOriginal + tail.html;

    // Собираем текст: оригинал + хвост
    var textCombined = text + tail.text;

    // Кладём оба формата в буфер
    if (e.clipboardData) {
      e.clipboardData.setData('text/html', htmlCombined);
      e.clipboardData.setData('text/plain', textCombined);
      e.preventDefault(); // важно: переписываем содержимое буфера
    } else if (window.clipboardData) {
      // старый IE
      window.clipboardData.setData('Text', textCombined);
      e.preventDefault && e.preventDefault();
    }
  }, false);
})();
</script>
Проверка:

Откройте страницу, выделите абзац длиннее порога, нажмите Ctrl+C, вставьте в Google.Docs — увидите хвост «Источник: …».

Способ 2. Режьте «правую кнопку» и горячие клавиши — но не отключайте выделение

Запретите то, что ускоряет копипаст новичку: контекстное меню и «горячие» сочетания. Выделение не трогайте. Люди ведут курсором по строке, цитируют фрагменты, сохраняют заметки. Запрет выделения бьёт по вовлечению и бесит лояльных читателей.

Что включить:
  • блок правой кнопки мыши;
  • блок Ctrl/Cmd + C, X, S, P, A (массовое выделение);
  • разрешить выделение текста.
Универсально для любого сайта (скрипт без отключения выделения)
Вставьте сниппет перед </body> или в общий JS. Он блокирует контекстное меню и «горячие» копирование/вырезание/сохранение/печать/массовое выделение. В инпутах, текстовых областях и элементах с contenteditable копирование разрешено, чтобы не ломать формы. Любой блок можно пометить data-allowcopy, чтобы в нём копирование работало.
Отключает правую кнопку и горячие сочетания копирования/печати (Ctrl/Cmd + C/X/S/P/A) на странице, но выделять текст можно
<script>
(function () {
  // Какие сочетания режем
  var KEYS = { C:67, X:88, S:83, P:80, A:65 };
  function isMac(){ return navigator.platform.toUpperCase().includes('MAC'); }

  // Разрешаем всё внутри полей ввода и зон, где явно разрешили
  function isEditable(el){
    if (!el) return false;
    if (el.closest('[data-allowcopy]')) return true;
    if (el.isContentEditable) return true;
    var tag = (el.tagName||'').toLowerCase();
    return tag==='input' || tag==='textarea';
  }

  // 1) Режем контекстное меню вне разрешённых зон
  document.addEventListener('contextmenu', function(e){
    if (!isEditable(e.target)) e.preventDefault();
  }, {capture:true});

  // 2) Режем «горячие» комбинации вне разрешённых зон
  document.addEventListener('keydown', function(e){
    var ctrl = isMac() ? e.metaKey : e.ctrlKey;
    if (!ctrl || isEditable(e.target)) return;

    var k = e.keyCode || e.which;
    if (k===KEYS.C || k===KEYS.X || k===KEYS.S || k===KEYS.P || k===KEYS.A){
      e.preventDefault();
      // по желанию: мягкое уведомление
      // alert('Копирование отключено');
    }
  }, {capture:true});

  // 3) На мобильных скрываем системное «долгое нажатие» (контекст), но НЕ трогаем выделение
  var css = document.createElement('style');
  css.textContent = 'html{-webkit-touch-callout:none;}';
  document.head.appendChild(css);
})();
</script>
Как проверить:
  1. Выделите текст на странице — выделение работает.
  2. Нажмите правую кнопку — контекстное меню не появляется.
  3. Нажмите Ctrl/Cmd + C/X/S/P/A — ничего не происходит.
  4. В поле ввода (<textarea>/input/редактор) — всё копируется и сохраняется как обычно.

Способ 3. Настройте защиту изображения

Картинки крадут первыми. Сделайте две вещи: видимую метку на веб-версии и метаданные автора внутри файла. Держите оригиналы отдельно.-версии и метаданные автора внутри файла. Держите оригиналы отдельно.

1) Готовьте две версии каждого файла
  • Оригинал — полный размер без знака. Храните в закрытой папке/облаке.
  • Превью для сайта — сжатая копия (WebP/JPEG), водяной знак по центру, сохранённые метаданные.
2) Заполните IPTC/EXIF: кто автор и как связаться
Хостеры и площадки читают эти поля, когда вы шлёте жалобу. Впишите: Author/Creator, Copyright, Website/URL, Email.

Инструменты без кода:
  • XnView MP (бесплатно): открыть → Инструменты → Редактировать IPTC → заполнить поля → Сохранить для всех выбранных.
  • Adobe Bridge: Tools → Create Metadata Template → применить к серии.
Скриншот XnView MP: слева панель EXIF/IPTC с полями Author, Copyright и др

Способ 4. Прикройте лёгкие точки входа

Боты начинают с простого: вытягивают полный текст из RSS и забирают картинки по прямым ссылкам. Обрежьте им доступ.

Сделайте RSS коротким.

В ленту отправляйте только анонс на 200–400 знаков и кнопку «Читать далее». Полный текст держите на сайте. В ссылку добавьте метку ?src=rss&id=123 — по ней легко понять, кто тянет вашу ленту.

Запретите хотлинк картинок.

Хотлинк — это когда чужой сайт показывает вашу картинку с вашего же сервера. Включите защиту у CDN или на хостинге: разрешайте показы только с вашего домена, остальным — запрет (ошибка 403).

Поставьте лимиты на «прожорливые» пути.

Ограничьте частоту запросов к типичным целям парсеров: /uploads/, /images/, /feed/, /api/, /wp-json/. Правило простое: «слишком много запросов с одного IP за минуту — проверка (Challenge) или блок (Block)».

Способ 5. Наладьте индексацию и скорость реакции

Ваша цель — чтобы поисковик увидел ваш URL раньше копии и запомнил вас как первоисточник. Для этого действуйте сразу после публикации.

1. Отправьте страницу на переобход

Откройте страницу в браузере и убедитесь, что всё грузится без ошибок.
В Google Search Console вставьте URL в верхнюю строку «Проверить любой URL» → Запросить индексирование.

В Яндекс.Вебмастере зайдите в «Индексирование → Переобход страниц» → добавьте ваш URL.
Яндекс.Вебмастер — «Переобход страниц»: отправьте URL на приоритетное индексирование (лимит 150 в сутки).

2. Протолкните ссылками из своих каналов

Сделайте короткие анонсы со ссылкой на тот же URL, без редиректов:
  • Телеграм-канал/чат, корпоративные соцсети, рассылка.
  • Профильные площадки: форум, комьюнити, каталог (если уместно).
  • В ссылку добавьте метку ?src=social — поймёте, откуда пришёл бот.
Заведите быстрый ритуал на каждый релиз. Публикация → GSC «Запросить индексирование» → Вебмастер «Переобход» → Анонсы → 2–3 внутренних ссылки → Проверка в инструментах. Если статья важная, повторите анонс через 24 часа в другом канале, чтобы бот пришёл ещё раз.

Что делать, если уже украли

Действуйте по лестнице: доказательства → владелец → хостер/CDN/регистратор → поисковики → предсудебка. На каждом шаге прикладывайте один и тот же пакет.

1. Сохраните копию страницы-нарушителя

Откройте чужую страницу с вашим материалом, сохраните её как «Веб-страница, полностью», сделайте 3–5 скриншотов (в один из них попадут дата и время на экране), запишите короткое видео прокрутки страницы сверху вниз. Сложите всё в одну папку вместе с копией вашей оригинальной страницы.

2. Напишите владельцу сайта-нарушителя

Найдите e-mail на странице «Контакты» или через whois-сервис. Отправьте короткое письмо: «Вы используете наш материал без разрешения. Удалите в течение 48 часов. Оригинал: <ваш URL>. Копия: <их URL>. Во вложении — скриншоты и копии страниц». Попросите подтвердить удаление письменно.
Здравствуйте.

На странице [URL копии] размещён наш охраняемый материал без согласия правообладателя.

Оригинал: [URL оригинала]. Правообладатель: [ФИО/Компания].
На основании ч. IV ГК РФ (в т.ч. ст. 1255, 1270) требуем в течение 48 часов:
  1. удалить материал (включая изображения/файлы/кэш/копии);
  2. направить письменное подтверждение удаления на [email].
При невыполнении требования оставляем за собой право обратиться к хостинг-провайдеру (abuse) и в поисковые системы с жалобой на нарушение авторских прав, а также требовать компенсацию по ст. 1301 ГК РФ.

Контакты: [email], [телефон].
Вложения (доказательства): скриншоты, сохранённые копии страниц, данные об авторстве.

С уважением,
[ФИО, должность]
[Компания]

3. Пожалуйтесь хостеру (провайдеру сайта)

Если владелец молчит, найдите хостера сайта (в whois обычно есть «abuse@…») и отправьте то же письмо с вложениями: «На их сайте размещена копия нашей страницы. Просим снять материал или уведомить клиента». Часто после жалобы провайдер снимает копию быстро.

4. Уберите копию из поиска

Заполните форму жалобы: в Google — DMCA, в Яндексе — через Вебмастер/обращение по нарушениям. Вставьте ссылку на ваш оригинал и ссылку на копию, приложите скриншоты. Попросите удалить копию из результатов поиска.
Пример каталога в облаке Mail.ru, используемого для недобросовестного обмена файлами. Мы не поощряем и не распространяем пиратский контент.

5. Если не помогло — переходите к юршагам

Сделайте нотариальный осмотр страницы-нарушителя (нотариус зафиксирует содержимое и дату), отправьте предсудебную претензию с требованием удалить материал и выплатить компенсацию, дальше подавайте иск при необходимости. Здесь поможет юрист, но ваши скриншоты и сохранённые страницы уже готовы.

На что не стоит тратить силы

Перед тем как ставить «защиту от всего», остановитесь. Есть приёмы, которые съедают время, ломают чтение и почти не мешают тем, кто умеет копировать. Вместо точечных запретов строим систему: мягкие барьеры на фронте, быстрые сигналы поисковикам, мониторинг и готовый юридический пакет. Ниже — что не даёт отдачи и чем это заменить.

1. Тотальный запрет выделения и «ловушки F12»
Не тратьте время на CSS user-select:none; и скрипты, которые ломают DevTools. Читатели ведут курсором по строке, копируют цитаты, сохраняют заметки. Когда выделение не работает, люди злится и закрывают страницу. А «ловушки F12» блокируют только новичков: любой опытный пользователь откроет исходник через меню, сохранит HTML одним кликом или прогонит страницу через «читалку». Копии никуда не денутся.

Делайте вместо этого:
— оставьте выделение, но отрежьте правую кнопку и горячие клавиши (Ctrl/Cmd + C/X/S/P/A);
— добавляйте хвост «Источник: URL» при копировании фрагментов длиннее 100–120 символов;
— для картинок используйте водяной знак по центру и запрет хотлинка в CDN.

2. Полнотекстовые RSS-ленты

Полный текст в RSS — готовая кормушка для парсеров. Они даже на сайт не зайдут: заберут всю статью из фида и опубликуют под своим доменом. Итог: копия может попасть в индекс раньше вас, а вы потеряете трафик.
Делайте вместо этого:
— отдавайте анонс 200–400 знаков и кнопку «Читать далее»;
— добавляйте к ссылке метку ?src=rss&id=123, чтобы отследить утечки;
— ставьте rate limit на /feed и просите CDN показывать челлендж «подозрительным» IP.

3. Надежда на один «волшебный» плагин
Плагин не заменит систему. Он не чинит индексирование, не пишет письма в абузу, не ставит водяные знаки, не собирает доказательства. Ставить «всё-в-одном» и ждать чудес — путь к разочарованию: UX упадёт, а парсеры продолжат работу.

4. Делайте вместо этого слои защиты:
— до публикации: фиксация авторства (дамп, скринкаст, хэши, депонирование);
— во время публикации: каноникал на себя, быстрый переобход в Яндекс/Google, анонсы в своих каналах;
— мягкие барьеры: правый клик и шорткаты — OFF, «Источник: …» при копировании — ON, водяные знаки, хотлинк-защита;
— мониторинг: события copy_large, сегмент «Подозрительный», проверки через Advego/поиск в кавычках;
— протокол 24 часа: письмо владельцу → абуза хостеру/CDN → жалобы в поисковики → предсудебка.

Так вы не «запрещаете всё», а снижаете выгоду кражи, ускоряете признание себя первоисточником и добиваетесь снятия копий без лишних нервов.
Задайте вопрос автору статьи
Еще статьи по теме