Делаем внешние ссылки внутренними

Главные вкладки

Аватар пользователя kamillo kamillo 31 января 2011 в 0:51

Прячем ссылкуМногие вебмастера хорошо знают модуль noindex_external_links, который позволяет спрятать внешние ссылки. Лично у меня модуль отказался нормально работать, так как на сайте ссылки добавлялись в различных вариациях - где-то использовался BBcode, где-то html, где-то стоял атрибут rel nofollow.

После небольшого апгрейда, модуль прекрасно преобразовывает внешние ссылки во внутренние. Пример ссылки: http://вашсайт.ру/redirect.php?go=http://чужойсайт.ру

Измененный модуль можно скачать по этой ссылке. В архиве, кроме папки модуля, есть файл redirect.php , его нужно поместить в корень сайта.

Посмотреть модуль в работе можно на моем сайте аудиокниг - откройте любой пост и наведите курсор на ссылку.

Для того, чтобы все заработало, нужно установить измененный модуль, скопировать файл redirect.php в корень сайта и в форматах ввода установить флажок "Запрет индексации внешних ссылок", в формате, который вы используете.

Модуль меняет ссылки у вновь созданных постов. Чтобы спрятать ссылки у старых нод, я менял в базе формат ввода для всех нод сначала на один вариант, потом на другой (возможно есть более простой и элегантный способ).

Я использую этот модуль на всех своих сайтах, возможно он пригодится и вам.

Комментарии

Аватар пользователя Alex Bacart Alex Bacart 31 января 2011 в 12:19

Вопрос: а зачем вообще превращать внешние в локальные ссылки? Это как-то влияет на отношение поисковиков к сайту?

Аватар пользователя iNFerNo iNFerNo 31 января 2011 в 12:51

а зачем это нужно? вот если бы внешние ссылки не фигурировали бы - другое дело. И кто смотрит откуда идет скач?

По этому модулю можно ограничивать по ролям скачивание тогда уже внешних ссылок?

Аватар пользователя trendbender trendbender 31 января 2011 в 14:42

> Вопрос: а зачем вообще превращать внешние в локальные ссылки? Это как-то влияет на отношение поисковиков к сайту?
Чем больше у вас внешних ссылок с сайта для поисковиков, тем ниже вес каждой ссылки. Поэтому закрытие внешних ссылок является хорошей практикой. И такие сайты ранжируются выше в выдаче.

> а зачем это нужно? вот если бы внешние ссылки не фигурировали бы - другое дело
Они и не фигурируют, все внешние ссылки превращаются во внутренние

Тот, кто любит sape или trustlink знает, зачем это нужно Smile

kamillo, большое спасибо, не видел подобных решений, пол интернета перерыл в поисках подобного плагина.

Аватар пользователя Alex Bacart Alex Bacart 31 января 2011 в 18:11

"trendbender" wrote:
Чем больше у вас внешних ссылок с сайта для поисковиков, тем ниже вес каждой ссылки. Поэтому закрытие внешних ссылок является хорошей практикой. И такие сайты ранжируются выше в выдаче.

Ну в таком случае надо обязательно эту штуку прикрутить, но дело в том, что для 7-ки у этого модуля еще нет порта, нашел для себя ext_link_page - думаю, стоящая вещь, буду пробовать.
Спасибо за информацию Wink

Аватар пользователя gerboss gerboss 15 февраля 2011 в 14:04

за модуль - спасибо!
вот только есть пара доменов, которые не нужно "прятать". можно ли их оставлять как есть, не перепуская через redirect.php?
в настройках есть секция "ВСЕГДА индексировать и переходить по ссылкам на эти домены:"
пишу туда "http://нужный_домен.ru", захожу в тему с ссылкой - все-равно ссылка выглядит как
http://вашсайт.ру/redirect.php?go=http://нужный_домен.ru

и посмотрел исходный код страницы, ни noindex, ни nofollow не добавились.

Аватар пользователя gerboss gerboss 21 февраля 2011 в 1:25

так проблема со списком доменов в секции "ВСЕГДА индексировать..." - это косяк модуля или косяк моих настроек?

Аватар пользователя MAMONT MAMONT 28 февраля 2011 в 20:46

"gerboss" wrote:
так проблема со списком доменов в секции "ВСЕГДА индексировать..." - это косяк модуля или косяк моих настроек?

Скорее всего косяк настроек, если kamillo ничего не сломал меняя модуль.
Убедись что в "Белом листе" у тебя именно домены через запятую вписаны (без http://).

Аватар пользователя gerboss gerboss 3 марта 2011 в 10:27

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

ну и странно, что относительные линки тоже через редирект идут...

Аватар пользователя gerboss gerboss 4 марта 2011 в 16:07

вообщем, в noindex_external_links.module вытаскиваем из закомментированного кода проверку белого списка и внедряем ее перед оборткой в редирект:

<?php  if (in_array($url['host'], $_noindex_external_links_allowed_domains))  return $link;
  else {
    
$url['host'] = "http://".$_SERVER['HTTP_HOST']."/redirect.php?go=".urlencode($match[2]);
    return 
'<a href="'$url['host'] .'" >'$match[4] .'</a>';
  }
?>

а что, если мы делаем ссылку через редирект, то для поисковиков ее в ноиндекс оборачивать и и ноуфолов добавлять не надо?

Аватар пользователя Xermit Xermit 13 мая 2011 в 1:02

У меня некоторая нехорошая ситуация сложилось с этим модулем.
При оформлении заказа в корзине выдается текстовое сообщение в этом текстовомм сообщение такой шаблон

Thank you for shopping at [store-name]. While logged in, you may continue shopping or <a href="[order-url]">view your current order status</a> and order history.

Но в результате получается http://www.mysite.com/redirect.pgp.....[node-url]...

Отмечу что сам сайт настроен как mysite.com,
но средстами mod_rewrite идет редирект на www.mysite.com

думаю косяк связан как то с этим, правда в белом списке я оба этих варианта перечислил

также установил в настройках в settings.php явно base_url в www.mysite.com

но все равно

<a href="http://www.mysite.com/redirect.php?go=%5Border-url%5D">просмотреть текущее состояние заказа</a>

такое ощущение что не смотря ни на что решил поменять, но при этом текст взят без подстановки токенов

Есть мысли, советы?

Аватар пользователя gerboss gerboss 13 мая 2011 в 9:00

относительные линки идут через редирект
как вариант - попробуйте настроить сообщение, что б в нем была ссылка не
/order-url/
а
http://www.mysite.com/order-url/
тогда редиректа не будет

Аватар пользователя Xermit Xermit 13 мая 2011 в 12:29

Патч чтобы относительные ссылки не редиректирились я уже применял и он работает на подобных ссылках.
Кстати при отключении модуля, фильтр все равно продолжают действовать
Попробовал в белом списке указать [order-url] но не помогло.
Суть в том, что когда в фильтр приходит этот текст в нем еще токен не заменен на url, когда он проходит через фильтр то тот его редиректит, а потом еще запускается какой нить еще фильтр который ескейпит в href текст, то есть скобки, те в свою очередь превращюатся в %XX и когда этот текст уже потом обрабывается модулем token, то своего токена он уже не видет.

Когда и где происходит тогда стандартно замена токенов в тексте?

Аватар пользователя Xermit Xermit 13 мая 2011 в 12:45

Появилась еще идея, что сам модуль ескейпит еще не замененный токен ведь вызывается urlencode.
Может не стоит ескейпить url пусть например Фильтр URL запукается после этого модуля и занимается этим. Тогда и токены не будут искажены и заменены модулем токен корректно в результате.

Аватар пользователя Xermit Xermit 13 мая 2011 в 13:03

Кому интересно кажется здесь решение этой проблемки http://drupal.org/node/488886
как понял проблема в том что токены надо заменять до их пропуска через фильтры.
То есть это скорее проблема ubercart-а, в принципе если бы белый список работал, то думаю указав в нем через запятую все
подобные токены, можно избежать редиректа без каки либо патчей, но я так понял белые списки не работают?

Аватар пользователя ssjmp7 ssjmp7 2 июля 2011 в 0:27

норм, этот модуль позволяет прятать ссылку на партнерку

к примеру:
www.porno.ru/?id=94594857 - такое спамить не приветствуется
а вот такое:
http://www.мойсайт.ru/redirect.php?go=http://porno.ru/?id=94594857

ну или закодировать, ...
к примеру там... яндекс)
http://hotaudiobook.ru/redirect.php?go=%68%74%74%70%3A%2F%2F%79%61%6E%64...

или .... что-нибудь покрепче
http://hotaudiobook.ru/redirect.php?go=%68%74%74%70%3A%2F%2F%70%6F%72%6E...

ну и хрумаком пройти I-m so happy а далее... почему-то сайт куда-то денется из серпа

можно было написать заголовок посту"это способ заработать"

Аватар пользователя zman zman 9 июля 2011 в 16:39

> Чтобы спрятать ссылки у старых нод, я менял в базе формат ввода для всех нод
> сначала на один вариант, потом на другой
> (возможно есть более простой и элегантный способ)

может есть идеи про другой, элегантный способ
а то несколько тысяч нод тяжко перелопатить

node_save не помогает

Аватар пользователя Xermit Xermit 25 июля 2011 в 22:20

мне что то кажется что делать замену надо в функции url http://api.drupal.ru/api/function/url/6, а всех кто ее не использует, посылать читать доку :d. Так как l все равно определяет какая ссылка внешняя или нет. а с регуляркой оставить только чтобы белые и черные списки работали.
но url не является заменяемой входит в ядро, зато она зовет функцию
http://api.drupal.ru/api/function/custom_url_rewrite_outbound/6
в принципе ее наверное и надо написать.
просто большинство ссылок все таки создаются функцией l, а все кто этого не делает нарушает негласные принципы Biggrin

Аватар пользователя dkslalkasdlsa dkslalkasdlsa 28 января 2012 в 14:48

"iNFerNo" wrote:

ксти а как вы на сайте тимизировали страницу для печати? print

Если вопрос ко мне, то через файл print.tpl.php который есть в папке с модулем. Копируем в папку с темой и вперед. Все как обычно.

Аватар пользователя hypnoser hypnoser 20 февраля 2012 в 12:29

"Roman Harlamov" wrote:
Вот для Drupal 7

Подскажите пожалуйста в чем может быть проблема. После установки модуля Drupal 7.12 сыпятся ошибки:
Notice: Undefined index: host в функции noindex_external_links_replace() (строка 187 в файле /var/.../sites/all/modules/noindex_external_links/noindex_external_links.module).
Notice: Undefined index: host в функции noindex_external_links_replace() (строка 187 в файле /var/.../sites/all/modules/noindex_external_links/noindex_external_links.module).
Notice: Undefined index: host в функции noindex_external_links_replace() (строка 187 в файле /var/.../sites/all/modules/noindex_external_links/noindex_external_links.module).
Модуль супер, но пока не могу воспользоваться. Помогите пожалуйста.

Аватар пользователя dylan dylan 9 апреля 2012 в 22:04

Для версии под drupal 7 если возникнет проблема с редиректом на ссылки с дополнительными параметрами тип mysite.ru/go.php?go=http://site.com/index.php?param1=123&param2=234 то можно подкорректировать файл go.php следующим образом:


<?php
$link 
$_GET['go'];
unset(
$_GET['go']);
foreach (
$_GET as $key => $item) {
  
$link .= '&' $key '=' $item;
}
header("HTTP/1.1 301 Moved Permanently");
header("Location:".$link);
?>
Аватар пользователя terabyte terabyte 3 июня 2012 в 11:23

kamillo wrote:
После небольшого апгрейда, модуль прекрасно преобразовывает внешние ссылки во внутренние. Пример ссылки: http://вашсайт.ру/redirect.php?go=http://чужойсайт.ру

Все бы хорошо. Но у меня пропали все target=_blank у ссылок. А они мне ой как нужны. То есть я в редакторе СКЕ редактирую ссылку и делаю ее открывающейся в новом окне, сохраняю статью, а там только ссылка - нового окна нет. Может что то нужно подправить в модуле? Не подскажите?

Аватар пользователя fmuzic fmuzic 14 августа 2013 в 16:26

terabyte wrote:
kamillo wrote:
После небольшого апгрейда, модуль прекрасно преобразовывает внешние ссылки во внутренние. Пример ссылки: http://вашсайт.ру/redirect.php?go=http://чужойсайт.ру

Все бы хорошо. Но у меня пропали все target=_blank у ссылок. А они мне ой как нужны. То есть я в редакторе СКЕ редактирую ссылку и делаю ее открывающейся в новом окне, сохраняю статью, а там только ссылка - нового окна нет. Может что то нужно подправить в модуле? Не подскажите?

Не нашел, как это сделать автоматически, но можно заставить все внешние ссылки открываться в новом окне, дописав сюда target:
$url['host'] = "http://".$_SERVER['HTTP_HOST']."/redirect.php?go=".urlencode($match[2]);
return ''. $match[4] .'';

Аватар пользователя Antoniy Antoniy 29 ноября 2012 в 3:07

А я читал истории о том, как Яндекс выкидывал из индекса страницы, на которых идет редирект внешних ссылок. Мол, что это вы выдаете страницу, на которой нихрена нету, а потом с нее редирект на другой сайт? Не хорошо.

Ну и есть официльнй фильтр Яндекса, который называется "Редирект", но это если редирект не через meta, а с помощью javascript.

Ну и Гугл вроде как тоже понимает, что редиректят на другой сайт.

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

Аватар пользователя fmuzic fmuzic 10 ноября 2015 в 11:49

В общем, тема показалась мне интересной. Поэтому немножко переделал вышеприведенный модуль под себя. Сделал следующее:

- работает белый список;
- не трогает свои относительные ссылки вида /node/somepage
- сделал кодирование/декодирование base64, по-моему так выглядит лучше
Посмотреть пример можно здесь (счетчики, конечно сделаны вручную, но это не проблема).
Если кому надо - пользуйтесь.

Аватар пользователя Hrundix Hrundix 11 января 2014 в 12:50

Есть ли возможность использовать это чудо только в определенных типах материалов и/или только в определенных форматах текста?

Аватар пользователя Hrundix Hrundix 20 января 2014 в 0:36

fmuzic wrote:
В общем, тема показалась мне интересной. Поэтому немножко переделал вышеприведенный модуль под себя. Сделал следующее:

- работает белый список;
- не трогает свои относительные ссылки вида /node/somepage
- сделал кодирование/декодирование base64, по-моему так выглядит лучше
Посмотреть пример можно здесь (счетчики, конечно сделаны вручную, но это не проблема).
Если кому надо - пользуйтесь.

Забыли уточнить, что под Drupal 6.x