хак - доработка "скрытия линков от поисковиков"
26
На досуге обнаружил, что чуток неправильно работает режим скрытия линков от поисковиков(BLOG_URL_NO_INDEX=true). А именно если в посте идет ссылка на твой же ресурс, то его также LS обрамляет noindex + добавляет rel=nofollow. В общем текущее положение вещей меня не устраивало, так как это для СЕО неправильно. Тут же было мной сделано решение.
1. файл /classes/modules/sys_text/Text.class.php
Находим ф-цию:
Комментим содержимое ф-ции и заменяем на:
Этого уже достаточно чтобы новые топики правильно обрабатывались. Но уже созданные топики пока что опубликованы через старый обработчик, поэтому надо все мессаги переобработать заново — для этого я написал небольшой скриптик.
2. создаем файлик, например, /republish_topics.php — содержимое в архиве
3. Не забываем удалить файл после его запуска.
забираем хак здесь, чтобы получить нормальный файл /republish_topics.php:
(пришлось залить как хак, потому что LS обрезает переводы строк и получается херня)
примеры:
внутренние линки в посте, без rel=nofollow и без noindex:
внешние линки в посте, с rel=nofollow и обрамлением в noindex:
п.с. представляется как «as is», если будут серъезные предложение или замечания — рассмотрю
1. файл /classes/modules/sys_text/Text.class.php
Находим ф-цию:
public function MakeUrlNoIndex($sText)Комментим содержимое ф-ции и заменяем на:
##### [hack] no_self_relnofollow #####
$all=array(); preg_match_all("/(<a .*>.*<\/a>)/Ui",$sText,$all);
foreach($all[1] as $atag){
if(strpos($atag,$_SERVER['HTTP_HOST'])===false) $_atag="<noindex>".$atag."</noindex>";
else $_atag=str_replace(array(" rel=\"nofollow\""," rel='nofollow'"),"",$atag);
$sText=str_replace($atag,$_atag,$sText);
}
return $sText;
##### [hack] no_self_relnofollow #####
Этого уже достаточно чтобы новые топики правильно обрабатывались. Но уже созданные топики пока что опубликованы через старый обработчик, поэтому надо все мессаги переобработать заново — для этого я написал небольшой скриптик.
2. создаем файлик, например, /republish_topics.php — содержимое в архиве
3. Не забываем удалить файл после его запуска.
забираем хак здесь, чтобы получить нормальный файл /republish_topics.php:
(пришлось залить как хак, потому что LS обрезает переводы строк и получается херня)
примеры:
внутренние линки в посте, без rel=nofollow и без noindex:
внешние линки в посте, с rel=nofollow и обрамлением в noindex:
п.с. представляется как «as is», если будут серъезные предложение или замечания — рассмотрю
- +8
- 11 октября 2009, 01:38
- sys
и не забыть в файле republish_topics.php в самом верху добавить строчку
$_SERVER['HTTP_REFERER'] = 'http://' . $_SERVER['HTTP_HOST'] .'/';
угу, сейчас обновлю, хотя — непонятно у кого такие глюки возникают !?
HTTP_REFERER — всегда к хосту относится, даже если на шаренге висит…
HTTP_REFERER — всегда к хосту относится, даже если на шаренге висит…
А что значит «кильнуть»? Как вообще воспользоваться скриптом?
Спасибо.
Спасибо.

- AntonVolkov
- 13 октября 2009, 15:11
- ↓
кильнуть — это означает удалить, запускается скрипт при прямом заходе yoursite.com/livestreet/republish_topics.php
он отработает и ничего не выведет, в случае если будут какие-то ошибки как правило ПХП скажет об этом
он отработает и ничего не выведет, в случае если будут какие-то ошибки как правило ПХП скажет об этом
спасибо. проделал. действительно ничего не выдалось — чистый лист. Но проверил: в постах по-прежнему nofollow собственные ссылки…

- AntonVolkov
- 13 октября 2009, 17:57
- ↑
- ↓
Эээ… Боюсь, не могу сего знать.)
Я пробовал и с
Я пробовал и с
$_SERVER['HTTP_REFERER'] = 'http://'. $_SERVER['HTTP_HOST'] .'/';(тогда пишет, что заголовки уже посылались) и без. Вот если без, то чистый лист тогда. А как посмотреть, куда ведет переменная? :-)

- AntonVolkov
- 14 октября 2009, 09:56
- ↑
- ↓
сделайте простой файл:
запустите его и скажите — что он возвращает?
<?php echo $_SERVER['HTTP_HOST']; ?>запустите его и скажите — что он возвращает?
Да, вернул имя домена без www. Т.е. всё как бы правильно должно быть?

- AntonVolkov
- 14 октября 2009, 14:16
- ↑
- ↓
слейте опять архив с хаком, я обновил файл /republish_topics.php
1) добавил вывод того какие топики сейчас скрипт обновляет и нашел ли он топики вообще
2) увеличил время исполнения скрипта при помощи max_execution_time — может скрипт таймаутит
в общем — теперь скрипт должен выводить что-нибудь :) и можно уже отталкиваться, из-за чего именно не работает
1) добавил вывод того какие топики сейчас скрипт обновляет и нашел ли он топики вообще
2) увеличил время исполнения скрипта при помощи max_execution_time — может скрипт таймаутит
в общем — теперь скрипт должен выводить что-нибудь :) и можно уже отталкиваться, из-за чего именно не работает
Спасибо за старания. Вот что выдалось:
Founded 255 topics with URLS
Begin to process:
Finished
Founded 255 topics with URLS
Begin to process:
Finished

- AntonVolkov
- 15 октября 2009, 10:56
- ↑
- ↓
Вообще оч. интересный рез-т!!!
Там между текстовыми строками вставился фрэйм с гугл-картой из одного моего топика, который в самом топике не отображается, а только код дам стоит этого фрэйма (парсер же его не пускает)…
Founded 255 topics with URLS
Begin to process:
Array
(
[topic_id] => 2
[topic_text] =>
Просмотреть увеличенную карту
[topic_text_short] =>
Просмотреть увеличенную карту
[topic_text_source] =>
Просмотреть Путешествие в Скандинавию 2008 на карте большего размера
[topic_extra] => s:0:"";
)
Там между текстовыми строками вставился фрэйм с гугл-картой из одного моего топика, который в самом топике не отображается, а только код дам стоит этого фрэйма (парсер же его не пускает)…

- AntonVolkov
- 16 октября 2009, 13:06
- ↑
- ↓
ага, теперь примерно понятно — где искать,
срабатывает вот эта строчка:
т.е. объект не создается почему-то, не отрабатывает:
нужно смотреть конкретно в чем дело… модули может какие-то стоят… или версия старая ЛС и соответственно там по-другому как-то, короче надо прогера брать и смотреть
а по поводу iframe'a ничего странного — в базу ЛС складывает все правильно, а вот обработчик уже вырезает его — все правильно(с точки зрения ЛС) :)
срабатывает вот эта строчка:
if(!is_object($oTopic)) break;т.е. объект не создается почему-то, не отрабатывает:
$oTopic=$oEngine->Topic_GetTopicById($r['topic_id']);нужно смотреть конкретно в чем дело… модули может какие-то стоят… или версия старая ЛС и соответственно там по-другому как-то, короче надо прогера брать и смотреть
а по поводу iframe'a ничего странного — в базу ЛС складывает все правильно, а вот обработчик уже вырезает его — все правильно(с точки зрения ЛС) :)
Да, модулей у меня куча и хаков разных, но а версия — 0.3!
Ну пускай тогда хоть новые посты будут с не ноиндекными тэгами… И на том спасибо! :-)
Ну пускай тогда хоть новые посты будут с не ноиндекными тэгами… И на том спасибо! :-)

- AntonVolkov
- 16 октября 2009, 18:37
- ↑
- ↓
Что-то у меня не выходит, даже при создании новых топиков с сылками, всё равно закрывает и свои и чужие, посмотрите пожалуйста, правильно ли код у меня получился:
public function MakeUrlNoIndex($sText) {
##### [hack] no_self_relnofollow #####
$all=array(); preg_match_all("/(<a .*>.*<\/a>)/Ui",$sText,$all);
foreach($all[1] as $atag){
if(strpos($atag,$_SERVER['HTTP_HOST'])===false) $_atag="<noindex>".$atag."</noindex>";
else $_atag=str_replace(array(" rel=\"nofollow\""," rel='nofollow'"),"",$atag);
$sText=str_replace($atag,$_atag,$sText);
}
return $sText;
##### [hack] no_self_relnofollow #####
//return preg_replace("/(<a .*>.*<\/a>)/Ui","<noindex>$1</noindex>",$sText);
}
У меня установлен хак Из за него где то конфликт получается и при публикации топика появляются такие предупреждения:
Это появляется если именно в теле топика присутствует это имя юзера
Буду благодарен если подскажете где поправить. Заранее спасибо.
Notice: Undefined index: host in /public_html/classes/modules/sys_text
Text.class.php on line 271
Notice: Undefined index: host in /public_html/classes/modules/sys_text/Text.class.php
on line 271
Warning: Cannot modify header information - headers already sent by (output started
at /public_html/classes/modules/sys_text/Text.class.php:271) in /public_html/include/
function.php on line 181 Это появляется если именно в теле топика присутствует это имя юзера
Буду благодарен если подскажете где поправить. Заранее спасибо.
эм… ну по каким-то причинам не отрабатывает код вытаскивания УРЛа, может там относительный путь указан, в общем замените вот этот кусок кода:
на вот такой кусок кода:
if(strpos($url['host'],$_SERVER['HTTP_HOST'])===false) $_atag="<noindex>".$atag."</noindex>";
else $_atag=str_replace(array(" rel=\"nofollow\""," rel='nofollow'"),"",$atag);
$sText=str_replace($atag,$_atag,$sText);на вот такой кусок кода:
if(is_array($url) && sizeof($url)>0){
if(strpos($url['host'],$_SERVER['HTTP_HOST'])===false) $_atag="<noindex>".$atag."</noindex>";
else $_atag=str_replace(array(" rel=\"nofollow\""," rel='nofollow'"),"",$atag);
$sText=str_replace($atag,$_atag,$sText);
}
Установи, работает, да не все правильно.
Дело в том, что если Вы находитесь на сайте, то вставив ссылку на одну и ту же страницу:
, то в одном случае получим «чистый» код, а в другом с noindex и nofollow
Понимаете о чем это я?
Дело в том, что если Вы находитесь на сайте, то вставив ссылку на одну и ту же страницу:
, то в одном случае получим «чистый» код, а в другом с noindex и nofollow
Понимаете о чем это я?
да, я понял о чем вы
можете это поправить сами — перед строчкой
вставляете строчку:
можете это поправить сами — перед строчкой
if(strpos($url['host'],$_SERVER['HTTP_HOST'])===false) $_atag="<noindex>".$atag."</noindex>";вставляете строчку:
$_SERVER['HTTP_HOST']=(substr($_SERVER['HTTP_HOST'],0,4)=="www.")?substr($_SERVER['HTTP_HOST'],4):$_SERVER['HTTP_HOST'];
Сделал как указано, почистил кэш, попробовал заново отредактировать топик с предупреждениями — ничего не изменилось, кроме адресов строк:
Не обрабатывает
Notice: Undefined index: host in /public_html/classes/modules/sys_text/
Text.class.php on line 273
Notice: Undefined index: host in /public_html/classes/modules/sys_text/
Text.class.php on line 273
Warning: Cannot modify header information - headers already sent by (output
started at /public_html/classes/modules/sys_text/Text.class.php:273) in /
public_html/include/function.php on line 181Не обрабатывает
<user>имя пользователя</user>
эм… а вы проверьте что у вас там на 273 строчке, что-то мне подсказывает, что это не мой код выдает :) он сейчас не может доходить до «undefined index: host», потому что мы сейчас там условие поставили
А никто не пробовал сделать галочку «Индексировать ссылки», чтоб в определённых постах можно было оставлять ссылки открытыми. Т.е. пишу например пост о дружественном мне сайте, ссылку хочу оставить открытой (без noindex и nofollow), ставлю галочку и пост сохраняется с открытыми ссылками, в wordpress такая функция была, очень полезно. Функция должна быть доступной только админу. , но никто не поддержал.
Добрый день.
Я прошу прощения что беспокою… Если Вас не затруднит, не подскажете как поправить вот такую ситуацию?:
у становил Ваш хак, сделал как все было указанно в топике и запустил скрипт… Мне выдало что:
Founded 438 topics with URLS
Begin to process:
1 — topic ID: 1 processed
2 — topic ID: 2 processed
3 — topic ID: 3 processed
потом доходит до
145 — topic ID: 305 processed
146 — topic ID: 307 processed
и пишет
Finished
Получается что скрипт обрабатывает не все топики… Что нужно поправить, чтобы скрипт прошелся по всем постам?
Заранее благодарен за помощь!!!
Я прошу прощения что беспокою… Если Вас не затруднит, не подскажете как поправить вот такую ситуацию?:
у становил Ваш хак, сделал как все было указанно в топике и запустил скрипт… Мне выдало что:
Founded 438 topics with URLS
Begin to process:
1 — topic ID: 1 processed
2 — topic ID: 2 processed
3 — topic ID: 3 processed
потом доходит до
145 — topic ID: 305 processed
146 — topic ID: 307 processed
и пишет
Finished
Получается что скрипт обрабатывает не все топики… Что нужно поправить, чтобы скрипт прошелся по всем постам?
Заранее благодарен за помощь!!!
в 0.4.1 версии в файле Text.class.php вообще нет функции, которую требуется заменить.
Не знаете где она в текущей версии движка? Или там уже этим решением не обойтись?
Не знаете где она в текущей версии движка? Или там уже этим решением не обойтись?
Сайт очень понравился, сразу видно у автора есть вкус к дизайнерскому решению…
Но вот по поводу хака я даже не знаю, нашёл в статье ecovoice.ru/blog/eco/2598.html ссылку на внешний ресурс "квартиры", но она по чему то не обрамляется…
Но вот по поводу хака я даже не знаю, нашёл в статье ecovoice.ru/blog/eco/2598.html ссылку на внешний ресурс "квартиры", но она по чему то не обрамляется…
Комментарии (65)
RSS свернуть / развернуть