Всем привет! На связи Павел Стариков Fullstack-разработчик digital-агентства Webit. Представьте, вы потратили целый день на создание хороших фотографий для статьи на сайте. Выставили свет, поставили «на уши» множество людей, долго работали в «фотошопе». Фотографии получились отличные, вот только спустя год Яндекс внезапно присылает фильтр «малополезный контент», при этом другие статьи, которые своровали нашу картинку – на первых местах по SEO-высокочастотным запросам. Обидно, не правда ли?

Для предотвращения подобных ситуаций поисковые системы обращают внимания на текстовые мета-теги, которые можно записать в каждую фотографию. Основной формат изображений – JPEG имеет сразу несколько механизмов. Как Exif-данные, содержащие сведения об авторе, камере, дате изменения, так и менее известный стандарт IPTC, который хранит данные в двоичном формате.

В статье я расскажу:

  • про каждый формат, его особенности;

  • как прочитать и записать данные;

  • приведём примеры PHP-кода, который был неоднократно протестирован нами и с легкостью встраивается в любые популярные CMS, такие как Wordpress или Битрикс.

Exif-теги

Exif-теги (Сокращение от Exchangeable Image File Format) являются самыми известными «тегами» - текстовыми данными в файлах изображений. Обычно данные теги автоматически проставляются фотоаппаратом и содержат информацию о технических параметрах съёмки, таких как ISO, фокусное расстояние, модель камеры, иногда – GPS-данные места съёмки. По этим данным, кстати, правоохранительные органы периодически находят преступников.

Exif-данные фотографии можно посмотреть в Windows, нажав правой кнопкой на файл и щёлкнув на «Свойства»:

Отображение Exif-тегов в «свойствах» файла в ОС Windows
Отображение Exif-тегов в «свойствах» файла в ОС Windows

Также самая популярная программа для просмотра и редактирования Exif-данных: ExifTool.

Нас интересуют в контексте статьи теги Copyright, Description, Comment.

Для автоматического проставления Exif на сайтах с PHP потребуется:

  1. Установить библиотеку PEL (PHP Exif Library) с помощью composer.

  2. Пример PHP-кода, который проставляет нужные нам теги:

<?php
// Composer / PEL
require 'PEL/vendor/autoload.php';
use lsolesen\pel\Pel;
use lsolesen\pel\PelConvert;
use lsolesen\pel\PelDataWindow;
use lsolesen\pel\PelEntryAscii;
use lsolesen\pel\PelEntryUserComment;
use lsolesen\pel\PelExif;
use lsolesen\pel\PelIfd;
use lsolesen\pel\PelJpeg;
use lsolesen\pel\PelJpegComment;
use lsolesen\pel\PelTag;
use lsolesen\pel\PelTiff;

$image_path = '/var/www/html/sample.jpg';
webit_add_exif($image_path);

function webit_add_exif($original_image_url)
{
  // Image URLs
  $url_before = $original_image_url;
  $url_after = $original_image_url;
  // Comment
  $comment = ucfirst($_SERVER['HTTP_HOST']);
  // Exif
  $data = new PelDataWindow(file_get_contents($url_before));
  
  // Prepare image data
  $jpeg = $file = new PelJpeg();
  $jpeg->load($data);
  
  // Create new EXIF-headers, overwriting any existing ones (when writing to disk)
   
  $exif = new PelExif();  
  $jpeg->setExif($exif);  
  $tiff = new PelTiff(); 
  $exif->setTiff($tiff);
  
  // Create Ifd-data that will hold EXIF-tags 
  $ifd0 = new PelIfd(PelIfd::IFD0);   
  $tiff->setIfd($ifd0);
  
  // Create EXIF-data for copyright   
  $make = new PelEntryAscii(PelTag::COPYRIGHT, $comment);   
  $ifd0->addEntry($make);
  
  // Create EXIF-data for description 
  $make2 = new PelEntryAscii(PelTag::IMAGE_DESCRIPTION, $comment);
   
  $ifd0->addEntry($make2);
  
  // Create EXIF-data for comment   
  $exif_ifd = new PelIfd(PelIfd::EXIF);   
  $exif_ifd->addEntry(new PelEntryUserComment($comment));   
  $ifd0->addSubIfd($exif_ifd);
  
  // Save to disk   
  $file->saveFile($url_after);   
  return true;

}

В этом и последующих примерах в качестве тега я использую название домена сайта, на котором запускается скрипт. В других случаях, например, если нужно прописать имя и фамилию фотографа, вы можете модифицировать скрипт, изменив значение переменной $comment:

$comment = 'Pavel Starikov';

В таком случае результат будет следующий:

Не только название домена - Кастомное значение мета-тега
Не только название домена - Кастомное значение мета-тега

IPTC-теги

Стандарт IPTC является менее известным, тем не менее все JPG-файлы имеют возможности записи IPTC-тегов и поисковые системы «просматривают» их, вычисляя авторство картинки.

Список IPTC-тегов описан на сайте: https://exiftool.org/TagNames/IPTC.html

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

  • By-line – Указание автора

  • CopyrightNotice – Ссылка на лицензию

  • Source, Credit – Ссылка на ваш сайт

PHP-функция, проставляющая IPTC-теги, которой для обработки нужен только путь к картинке в файловой системе сайта (например /var/www/html/sample.jpg):

$image_path = '/var/www/html/sample.jpg';
webit_add_iptc($image_path);

// Main Function
function webit_add_iptc($image_path)
{
// Get Vars
$domain_full = $_SERVER['HTTP_HOST'];
$domain_left = explode('.', $domain_full)[0];
$tags = [
'80' => $domain_left, // By-line
'116' => 'Copyright ' . date('Y') . ', ' . $domain_full, // CopyrightNotice
'115' => $domain_full, // Source
'110' => $domain_full // Credit
];

// To Binary Code
$data = '';
foreach ($tags as $tag => $string) {
$data .= webit_add_iptc_tag(2, $tag, $string);
}

// Add IPTC to Image
$content = iptcembed($data, $image_path);

// Save Image
file_put_contents($image_path, $content);
}

// Sub Function
function webit_add_iptc_tag($rec, $data, $value)
{
$length = strlen($value);
$retval = chr(0x1C) . chr($rec) . chr($data);
if ($length < 0x8000) {
  
  $retval .= chr($length >> 8) . chr($length & 0xFF);
  } else {
  $retval .= chr(0x80) .
  chr(0x04) .
  chr(($length >> 24) & 0xFF) .
  chr(($length >> 16) & 0xFF) .
  chr(($length >> 8) & 0xFF) .
  chr($length & 0xFF);
  }
  return $retval . $value;
  }

Проверку изображения и просмотр IPTC-тегов рекомендуем осуществлять на официальном сайте: https://getpmd.iptc.org/getiptcpmd.html

После запуска вышеуказанного скрипта проверяем фотографию с добавленными тегами и видим, что теги проставились:

Официальный валидатор показывает успешно прописанные мета-теги
Официальный валидатор показывает успешно прописанные мета-теги

Официальный сайт IPTC по неизвестный причинам не показывает тег CopyrightNotice, но он прописан, что подтверждают другие прочие программы и сайты, показывающие IPTC-данные. А значит поисковые системы данный тег прочитают.

Неофициальные валидаторы показывают также тег CopyrightNotice
Неофициальные валидаторы показывают также тег CopyrightNotice

Неуникальные фотографии

Абсолютное большинство копирайтеров пользуются гуглом, не утруждая себя созданием фотографий.

Согласно ст. 1300, 1301 ГК РФ (с изменениями от 29.06.2023) ответственность за нарушение исключительного права на произведение составляет от 10 тысяч до 5 миллионов рублей.

Чтобы обезопасить себя от штрафов при невозможности сделать уникальные фотографии рекомендуем пользоваться нейросетями (Midjourney, Playground) или пользоваться фотостоками, такими как FreePik, Pixabay, Pexels, Unsplash. Использовать Яндекс картинки и Google Images в текущих реалиях – плохой вариант.

Итоги

Поисковые системы обращают внимание на копирайты в мета-данных фотографий, отдавая приоритет указанному в мета-тегах сайту.

Используя вышеуказанный код, при наличии одной и той же картинки на разных сайтах – в глазах поисковых систем вы останетесь первоисточником.

Если у вас остались вопросы по теме статьи – вы можете задать их в комментариях. Рассказать о своём опыте в сфере защиты изображений от копирования вы также можете в находящемся ниже блоке.

Комментарии (17)


  1. MonkAlex
    15.01.2024 08:59
    +2

    А если автор грузит фото\картинку с уже проставленными тэгами - кто прав? А если это теги фотохостинга-конкурента? =)

    Или авторы при загрузке передают права на фото сайту?


  1. saboteur_kiev
    15.01.2024 08:59
    +13

    не понимаю, кто мешает убирать эти теги, если они легко редактируются?


    1. Tasta_Blud
      15.01.2024 08:59
      +2

      более того: в подавляющем большинстве картинок теги отсутствуют напрочь. и более надёжным способом видится встраиваемые водяные знаки, чем очень пользуются популярные стоки. но и это убирается теми же ИИ-технологиями. так что, пока наиболее надёжным способом видится отдавать в паблик картинку с низким разрешением (что, впрочем, тоже обходится ИИ), и с высоким по оплате.

      как всегда, технические способы проигрывают юридическим.


    1. Vitaly83vvp
      15.01.2024 08:59
      +1

      И не просто вручную удалить, но и автоматизировать этот процесс.

      Да, банально, средствами того же PHP можно создать новую картинку и скопировать данные из исходной картинки. Инструкция из этой статьи подойдёт против очень ленивых пользователей или пользователей, которые не знаю что такое EXIF теги.

      Даже водяные знаки можно убрать, как минимум, простой обрезкой. Разумеется, если эти знаки где-то в углу, а не по всех картинке. Хотя, сейчас можно и от таких водяных знаков избавляться, но это уже будет требовать знаний в этом вопросе.


      1. NickyX3
        15.01.2024 08:59
        +1

        Там даже php не нужен, оно убирается одной командой ImageMagick


  1. shasoftX
    15.01.2024 08:59
    +6

    Аналогичный по надежности способ - писать рядом с картинкой "Не воровать!"


    1. noanswer
      15.01.2024 08:59
      +1

      эта картинка украдена с сайта ... ;)


    1. LordDarklight
      15.01.2024 08:59

      Тэги как раз большинство поленится вычищать.

      А вот такую строчку сразу полезут вырезать в редакторе - а при сохранении тэги, скорее всего, очистятся


  1. noanswer
    15.01.2024 08:59

    можно кратко в одном абзаце написать каке теги желательно прописывать автору размещая картинку в интернете? ... ну кроме копирайта



    1. pavel_starikov Автор
      15.01.2024 08:59

      Exif: Copyright, Diescription, Comment
      IPTC: By-line, Creator, Credit, Source, CopyrightNotice


  1. noanswer
    15.01.2024 08:59

    я не уверен что строчка "copyright 2023, webit.ru" корректна...

    я могу ошибаться но: "copyright" и/или "All rights reserved" или русские варрианты не эквивалентно © но могут дополнять значек

    после © идет имя персоны или название конторы владеющий правом, потом на, что распостраняется авторское право ... и год

    в случае фото например купленного на стоке наверное в договое оговаривается как прописывать авторство. ну и не забываем что авторское право не отчуждаемо и если кто-то испольует картинку законолательно корректно, то обязан указывать создателя произведения... кажется в IPTC для этого есть свои поля.

    кстати © - служебный знак и замена на (с) не зедательна...


    1. LordDarklight
      15.01.2024 08:59

      Чтобы там ни было написан - судя по статье на алгоритм приоритета это никак не повлияет.

      Впрочем какой бы красивой ни была картинка обычно важнее сама статья - и если статья в оригинале говно - и не популярна - а статья в повторном использовании изображения шедевр - то нефиг подсовывать на первое место поиска первую статью! Но да - обида автору оригинала останется - ведь он 90% времени потратил на картинку, а взявший её - 90% времени уже потратил на статью, ведь картинка то уже была! Иначе - было бы две статьи уровня говно, а не одна - так что тут ещё как посмотреть, что тут меньшее из зол!


      1. noanswer
        15.01.2024 08:59

        я не говорбю кто прав а кто нет ... но почему бы не заполнять теги правильно?
        а кто более важен в общем случае мы не можем сказать


  1. BasilioCat
    15.01.2024 08:59
    +1

    В статье никак не подтверждено, что написание домена в метаданных картинки хоть как-то влияет на определение, чья же картинка оригинальная. Следовательно, это еще один SEO-миф. Как уже было упомянуто в комментариях, никто сайтам-подражателям не мешает залить в exif свои метаданные, отдавать Last-Modified далеко в прошлом и пр. За оригинальность (имхо!) отвечает дата индексации документа/картинки роботом, обновляйте сайтмап, обновляйте страницы на сайте - будет чаще ходить робот.


  1. Vitaly83vvp
    15.01.2024 08:59
    +1

    Интересно, а если скопировать оригинальную картину и изменить EXIF на свои данные, попутно изменив дату создания файла на более раннюю, поисковики не понизят рейтинг оригинальной?


    1. vesowoma
      15.01.2024 08:59

      Этот кейс решается по фиксированию времени/даты индексирования поисковиком оригинала контента и копий. С погрешностью в сроки переиндексации


      1. Vitaly83vvp
        15.01.2024 08:59

        А если появится новый ресурс (сайт) с этой картиной? Просто, раньше он был недоступен (например) или поисковик проиндексировал его позже.