Как можно наказать за копирование контента
На вашем сайте много текстового материала, и его частенько растаскивают все, кому не лень? Есть немного необычный способ за это наказать, не скажем, что мы «за» такие методы, но нелишне будет о нем знать тем, кто работает с контент-менеджерами, не владеющими навыками html и css.😈
Многие SEO-специалисты знакомы с общепринятыми методами защиты авторского права:
История, которую хотим рассказать мы – куда более изощренная.
Предыстория. Занимаясь продвижением одного проекта, мы однажды заметили, что он сильно просел в Яндексе. Проседание было только по определенным группам запросов и буквально за один раз, при этом другие группы КС продолжали расти дальше, поэтому на инцидент не обратили особого внимания.
На представленном графике видно, как это падение позиций отразилось на общей посещаемости проекта. Google тоже отреагировал, но совсем немного, что можно было списать на колебания спроса.
Начали разбираться, «где порылась собака», и нашли на сайте много скрытых ссылок на ресурс конкурента. Сначала подумали, что нас взломали, но это оказалось не так.
Маленькая сноска: контентом на сайте занимались специалисты на стороне клиента. И делали они это так – техническую информацию и описание продукта брали с сайта конкурента, переписывали ее до 90-100% уникальности и размещали на своем проекте.
В итоге, мы выяснили, что когда менеджеры копировали информацию с сайта конкурента, в качестве «подарка» к заимствованному элементу они получали и невидимый блок ссылок (о чем они, естественно, не подозревали) такого типа:
Вы спросите, как могло получиться так, что при полностью переписанном тексте сохранились все ссылки? А мы ответим:
Для изменения материала, менеджеры на стороне клиента использовали редактор в WYSIWIG-режиме, при котором текст отображается в привычном для многих виде «как в Word-е», соответственно, html код со скрытыми ссылками копирайтер не видит и преспокойно оставляет такой материал, в результате чего, конкурент получил пару десятков бэклинков с нашего сайта.
Отрицательная карма для донора при публикации таких ссылок очевидна (и в основном влияет на выдачу Яндекса), а вот что получает от невидимых ссылок акцептор? Мы особо не поняли, так как подобные ссылки считываются поисковыми системами как спам, тем более, что в самом коде было много «спамных» css-конструкций: ссылка в 1 пиксель далеко за пределами экрана и т.д.
Если уж хочешь испортить жизнь конкурента, так хоть веди по этим ссылкам на какой-нибудь сомнительный «мужской» сайт, но нет, конкурент вел к себе же.
UPD: на момент публикации статьи конкурент убрал данный скрипт со своего сайта, невидимые ссылки уже не добавлялись, но добавлялось простое и понятное: «… подробнее читайте на нашем сайте…»
Мы разобрали скрипт на составляющие, может быть, кого-то он заинтересует, а кто-то поймет, для чего так заморачиваться и поделится с нами 😀
Есть несколько форматов скрипта:
- ES6 модуль;
- Скрипт, подключаемый на html-странице.
import EvilClipboard from ‘./evil-clipboard.js’;
new EvilClipboard({
signatureText: ‘Больше информации на www.seolt.ru: ‘,
useHiddenLink: true
});
Подключение скрипта, если вы не используете модули внутри html страницы :
<script type=»module»>
import EvilClipboard from ‘./evil-clipboard.js’;
let a = new EvilClipboard({
signatureText: ‘Больше информации на www.seolt.ru: ‘,
useHiddenLink: true
});
</script>
Не забудьте seolt.ru заменить на ваш собственный сайт. ✌️
class EvilClipboard {
#signatureText;
#useHiddenLink;
#selectedText;
#selectedStrongText;
constructor(options = {}) {
this.#signatureText = options.signatureText || ‘Подробнее: ‘;
this.#useHiddenLink = options.useHiddenLink || false;
// Navigator clipboard api needs a secure context (https)
if(navigator.clipboard && window.isSecureContext) {
this.#setListener();
}
}
#setListener() {
document.addEventListener(‘copy’, (e) => {
e.preventDefault();
this.#copyToClipboardHook();
});
}
#copyToClipboardHook() {
this.#selectedText = this.#getSelectionText();
if (this.#selectedText) {
const modifyClipboard = `
${this.#selectedText}
${this.#useHiddenLink ? this.#generateHiddenLink() : »}
${this.#generateSignature()}
`;
this.#writeToClipboard(modifyClipboard);
}
}
#generateHiddenLink() {
const linkUrl = window.location;
const linkText = this.#selectedStrongText || document.getElementsByTagName(«h1»)[0].innerText || linkUrl;
const hiddenTemplate = `
<div style=»overflow: hidden; width: 1px; height: 1px; position: absolute; top: -10000px; left: -10000px;»>
<a href=»${linkUrl}» title=»${linkText}» rel=»nofollow» target=»_blank»>${linkText}</a>
</div>
`;
return hiddenTemplate;
}
#generateSignature() {
const linkUrl = window.location;
const signatureTemplate = `
${this.#signatureText} <a href=»${linkUrl}» title=»${linkUrl}» rel=»nofollow» target=»_blank»>${linkUrl}</a>
`;
return signatureTemplate;
}
#getSelectionText() {
let range;
if (document.selection && document.selection.createRange) {
range = document.selection.createRange();
return range.htmlText;
} else if (window.getSelection) {
const selection = window.getSelection();
if (selection.rangeCount > 0) {
range = selection.getRangeAt(0);
const clonedSelection = range.cloneContents();
this.#selectedStrongText = clonedSelection.querySelector(‘strong’)?.innerText;
const div = document.createElement(‘div’);
div.appendChild(clonedSelection);
return div.innerText;
} else {
return »;
}
} else {
return »;
}
};
#writeToClipboard(text) {
navigator.clipboard.write([new ClipboardItem({
‘text/plain’: new Blob([text], {type: ‘text/plain’}),
‘text/html’: new Blob([text], {type: ‘text/html’})
})]);
}
}
export default EvilClipboard;
Обсудить скрипт или задать вопросы можно в нашем Telegram канале.
Принцип работы:
И, все же, вопрос о том, зачем это все нужно, остается открытым.
Итог: если вы видите, что ваш проект просел или с трудом продвигается по каким-то запросам, нелишне будет проверить его на такие скрытые «подарки».