Редирект с google images

Заметки программиста: Редирект с google images
Недавно задумался над тем как же все таки бороться с гуглом, который после нового дизайна гугл картинок перестал отдавать трафик сайтам с которых он берет картинки.
В этом посте я приведу пример кода для .htaccess, после моих экспериментов все заработало, но есть недостатки.

Рассмотрим пример нажатия на кнопку Открыть в полном размере.

По нажатию на кнопку гугл открывает саму картинку и тем самым не перенаправляет трафик на сайт которому она принадлежит, от этого то и страдают вебмастера. У гугл картинок трафик на самом деле не большой, но все есть, и нам он очень нужен, поэтому я решил провести эксперимент и попробовать вернуть трафик с гугла.
Я не ставил на свои сайты ниже приведенный код, так как мне это просто ни к чему, однако если у вас есть картинки, то данный метод вы просто обязаны знать.
У вас есть свои сайт? Предлагаем воспользоваться интересными инструментами по нанесению логотипов на ручки или другие бытовые предметы иным словом Тампопечать uson-promopen.ru/application-of-logo
Суть основной проблемы:
Порыскав в логах аппача, я понял что гугл не передает реферер если пользователь переходит на картинку не посредственно по нажатию на кнопку «Открыть в полном размере», а это очень нехорошо, так как обычно с помощью .htaccess мы привязываем условия именно по рефу. Поэтому, если все же размещаем ниже приведенный код, нам понадобится еще одно условие, которое сделает исключение для нашего сайта.

Работа кода:
Нажали на кнопку «Открыть в полном размере», httaccess понимает что реф не передается и это не наш сайта, а адрес к которому обращаются выглядит следующим образом
site.ru/images/data/pic.jpg


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

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

Смотрим код.
RewriteCond %{HTTP_REFERER} ^
RewriteCond %{HTTP_REFERER} !^https?\:\/\/(www\.)?domain\.([a-z]+)
RewriteRule ^(.*)images\/(.*)\/(.+\.(jpg|jpeg))$ $1test.php?img=$1 [NC,L]


Там где domain на домен в разных зонах, если не нужно то убрать.

24 комментария

avatar
полезная «штука»
  • wiefix
  • +1
avatar
а что надо написать в файле test.php?
  • chos
  • 0
avatar
<?php
    header( 'Location: /', true, 307 );
avatar
отпишитесь пожалуйста, можете ли Вы за отдельную плату — помочь настроить редирект на сайте, у меня ничего не получается
  • chos
  • 0
avatar
распиши как делаешь, глянем
avatar
все картинки у меня находятся в сайт.com/data_images/имяпапки/*.jpg

вот как выглядит файл .htaccess

RewriteEngine On
Options +FollowSymLinks
— редирект с www на без него
RewriteCond %{HTTP_HOST} ^www\.сайт\.com
RewriteRule ^(.*)$ сайт.com/$1 [R=permanent,L]
-защита от фишинга
RewriteCond %{HTTP_HOST} !^(www.)? сайт.com$
RewriteRule ^$ google.com [R]
-редирект с несуществующих страниц на главную
ErrorDocument 404 blognewsart.com
-вставляю Ваш код
RewriteCond %{HTTP_REFERER} ^
RewriteCond %{HTTP_REFERER} !^https?\:\/\/(www\.)? сайт\.([a-z]+)
RewriteRule ^(.*)images\/(.*)\/(.+\.(jpg|jpeg))$ $1test.php?img=$1 [NC,L]

и создал пустой файл test.php
в котором только Ваша строка
<?php
header( 'Location: /', true, 307 );

вот мой сайт http:// blognewsart. com
  • chos
  • 0
avatar
попробуй строку
RewriteRule ^(.*)images\/(.*)\/(.+\.(jpg|jpeg))$ $1test.php?img=$1 [NC,L]

поменять на
RewriteRule ^(.*)data_images\/ИМЯПАПКИ\/(.*)\/(.+\.(jpg|jpeg))$ http://site.ru/test.php?img=$1 [NC,L]
avatar
увы, может в файле test.php ещё что то должно быть?
  • chos
  • 0
avatar
попробуй в test.php
прописать
Header( "HTTP/1.1 302 Moved Temporarily" );
        Header( "Location: http://site.ru" );

Затем перейди по адресу site.ru/test.php
Если редирект произойдет то все в порядке.
avatar
ладно, извините за беспокойство я похоже совсем тупой — не получается
  • chos
  • 0
avatar
Перед Header нужно поставить
<?php

т.е. внутри файла test.php будет следующее
<?php
Header( "HTTP/1.1 302 Moved Temporarily" );
        Header( "Location: http://site.ru" );
avatar
откуда у Вас столько терпения
да редирект работает. т.е. я сделал blognewsart.com/test.php
и он переправил на site.ru
значит проблема в .htaccess?
  • chos
  • 0
avatar
итак ещё раз картинки у меня имеют вот такую структуру
blognewsart.com/data_images/fiji/fiji-01.jpg
соответственно вместо fiji идут могут идти любые названия

файл .htaccess я привел к виду
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^
RewriteCond %{HTTP_REFERER} !^https?\:\/\/(www\.)?blognewsart\.([a-z]+)
RewriteRule ^(.*)data_images\/(.*)\/(.+\.(jpg|jpeg))$ $1test.php?img=$1 [NC,L]

но увы при нажатии в гугле на открыть в полном окне или в англ версии гугла View image — открывается картинка сразу
  • chos
  • 0
avatar
Проблема в nginx! Инфа 100%
Читай в восстановленных комментах scriptland.com.ua/blog/seo/21.html#comment57
ПС. На сервере без nginx только что проверил, работает всё.
avatar
огромное спасибо паписал в тех поддержку, чтобы доступ дали к этой настройки
  • chos
  • 0
avatar
Спасибо ТЕБЕ большое, дай бог здоровья, все работает.
  • chos
  • 0
avatar
Отлично!
avatar
я надеюсь не очень сильно обнаглею, если спрошу, а совместно с watermark описанным на Вашем сайте, эти два способа защиты картинок могут работать?
  • chos
  • 0
avatar
нет, так как этот способ делает редирект, придется выбирать либо то либо это =)
avatar
понял, спасибо
  • chos
  • 0
avatar
подскажите пожалуйста а как сделать редирект не на главную а на страницу где находится картинка?
  • chos
  • 0
avatar
в примере гетом берется название изображения
test.php?img=$1
т.е. в test.php можно принять название так
<?php
    $image = $_GET['img'];

    echo $image;

В таком случае необходимо искать по базе данных по полю где находится картинка, для получения ссылки на пост, т.е. где информация о посте находится. Обычный SELECT запрос, ну или с LIKE по определенному полю
Что то вроде
"SELECT * FROM post WHERE image LIKE '%{$image}%'";


Затем по полученным данным (где можем узнать URL поста) передаем в редирект
Header( "HTTP/1.1 302 Moved Temporarily" );
        Header( "Location: http://sitе.ru/" . $row['url'] );
avatar
т.е. php файл должен выглядить так:
<?php
$image = $_GET['img'];
echo $image;
«SELECT * FROM post WHERE image LIKE '%{$image}%'»;
Header( «HTTP/1.1 302 Moved Temporarily» );
Header( «Location: sitе.ru/». $row['url'] );

просто вот в таком виде не работает, если только опять мне в техподдержку писать, чтобы что-то исправили
  • chos
  • 0
avatar
теоретически так, но не практически.
Практически
«SELECT * FROM post WHERE image LIKE '%{$image}%'»;

Нужно подключится к базе данных, выполнить этот SELECT и получить данные о посте в котором находится данная картинка.
Затем по полученным данным из базу сформировать URL для перехода на страницу поста, этот URL нужно прописать сюда
Header( «HTTP/1.1 302 Moved Temporarily» );
Header( «Location: URL );
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.