Для получения триального ключа
заполните форму ниже
Team License (базовая версия)
Enterprise License (расширенная версия)
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
GBP
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте папку
Spam/Junk и нажмите на письме кнопку "Не спам".
Так Вы не пропустите ответы от нашей команды.

>
>
Д'Артаньян и интернет, или работа над п…

Д'Артаньян и интернет, или работа над проблемой битых ссылок

30 Авг 2010

Господа, хватит уже рассматривать ссылки исключительно в контексте их количества, купли/продажи и считать PR сайта, где они расположены. Пора заботиться не о роботах, а о людях. Работать с интернетом становится все невыносимее. Цветут и множатся фермы автогенерируемых сайтов с говнотекстами, да простят меня дамы. Из-за них невозможно найти даже технические материалы, не говоря про обыкновенные. Но я бы так не переживал про поиск технических материалов, если бы в них были корректные ссылки. Ссылки дохнут как мухи и, читая пост годичной давности в форуме или блоге, нет почти никаких надежд перейти по указанным ссылкам.

Эта статья устарела. Механизм работы со ссылками, описанный в ней, больше не применяется.

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

Неработающих ссылок в интернете такое количество, что даже невозможно выбрать что-то для примера. Каждый сталкивался, что прочитав интересную информацию о чем то, он уверенно нажимал на ссылку и попадал в никуда. Причем конечная цель обычно вовсе не мертвый сайт, а вполне живой. Причем настолько живой, что постоянно правится без заботы о перенаправлении пользователей приходящих с внешних ресурсов. Впрочем, часто не заботятся и о переходах с внутренних ресурсов. Хороший тому пример статьи в MSDN.

Кто-то возразит, что в том, что материал куда то переехал, нет ничего страшного. Его всегда можно легко найти в Google. Во-первых даже если можно, то это тратит огромное количество времени. И эта большая проблема. Один единственный, но полезный ресурс, перемещенный по прихоти администратора сайта, отнимет время у тысяч, а в некоторых случаях и миллионов людей. Каждый из них будет вынужден искать нужный материал и переходить по ссылкам.

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

Первый пример. Для того чтобы выпустить плагин для Microsoft Visual Studio необходимо для каждой версии получать на сайте Microsoft специальный ключ (PLK). Несколько лет этот ключ выдавали на странице http://msdn.microsoft.com/en-us/vsx/cc655795.aspx (ссылка не работает). Пару месяцев назад кто-то решил, что называть раздел "vsx" идеологически не верно, и его переименовали в "vstudio", соответственно ссылка стала новой https://msdn.microsoft.com/en-us/vstudio/cc655795.aspx. Но ВЕЗДЕ включая сайты Microsoft ссылки были старыми, а не новыми. Поиск Google также выдавал только старую ссылку, поскольку новая нигде не фигурировала. Помогли в форуме Microsoft, где явно указали новую страницу. Вопрос – кому-то стало лучше от того, что поменяли ссылку? Какое количество людей по всему миру было вынуждено искать ответ на этот вопрос? Если так хочется поменять ссылку, неужели было сложно сделать редирект?

А вот другой, более эмоциональный пример. Есть такая книга "C# для школьников", выпущенная при поддержке Microsoft и ориентированная на детей 12-16 лет.

0075_The_problem_of_bad_links_ru/image1.png

Я лично не уверен, что в таком возрасте рационально заниматься изучением C#, но книга в целом производит весьма приятное впечатление. По крайне веселых поясняющих картинок там очень и очень много.

0075_The_problem_of_bad_links_ru/image2.png

Так вот представьте, сколько сил люди приложили, чтобы создать такую книгу. Кем-то была придумана рекламная инициатива Microsoft познакомить детей с C# еще в школе, человек книгу написал, затем ее переводили, художник рисунки перерисовывал, чтобы текст был на русском и, наверное, на других языках. Было потрачено много денег и времени. И какой результат? А уверен, что никакого!

Я очень сомневаюсь, что ребенок продвинется дальше "Часть 1. Первое знакомство", ибо там ему объясняется о необходимости скачать и установить Microsoft Visual C# 2008 Express Edition. Я не сомневаюсь в способностях школьника. Starcraft 2 они без сторонней помощи выкачивают и устанавливают, а в разных iPhone лучше меня разбираются. Все банальнее. Просто там предлагается скачать с адреса, которого уже не существует:

0075_The_problem_of_bad_links_ru/image3.png

Результат перехода:

0075_The_problem_of_bad_links_ru/image4.png

И спрашивается, зачем было заниматься с созданием этой книги, если все разбивается о бездумное перекладывание данных на сайте с места на место? Я очень сомневаюсь, что школьник тринадцати лет после этого отправится в Google искать для скачивания чудо-зверя "Microsoft Visual C# 2008 Express Edition". С вероятностью 90% на этой главе с изучением C# все будет покончено.

Да, может показаться, что я критикую Microsoft. Нет, на других сайтах не лучше, просто такие примеры получились.

Какие я делаю из всего этого выводы?

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

Как мы решаем эту проблему

Мы пишем технические статьи и часто ссылаемся на различную документацию, инструменты, записи в сторонних блогах. Как следствие мы также часто сталкиваемся с проблемой перемещения материалов и статей на сторонних сайтах. Особенно этим почему-то грешат такие сайты крупных компаний, как Microsoft, Intel или AMD. Они перемещают целые разделы и в результате, например, искать помощи в статьях сотрудников Microsoft/Intel, которым исполнился хотя бы год весьма неблагородное дело. На какую ссылку не кликни - попадаешь в никуда. Думаю, что многие программисты поймут мои переживания.

Уверен многим на это наплевать, не работает переход куда-то, ну и ладно. Собственно так и есть, раз в интернете такое количество мертвых ссылок. Однако мы пишем статьи для людей, а не для поисковых систем. И заявляю я об этом с гордостью. Хоть миллионы не заработали пока, но хоть на минутку хочется себя д'Артаньяном почувствовать.

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

Естественным решением является создание системы редиректа. Я расскажу как у нас все это работает, возможно, кто-то захочет сделать у себя нечто подобное. Я даже очень хочу, чтоб кого-то это заинтересовало, так надоели дороги в никуда!

Система состоит из базы, хранящей пару короткая ссылка - ссылка на внешний ресурс. Пользовательский интерфейс добавления ссылок достаточно прост и показан на рисунке ниже.

0075_The_problem_of_bad_links_ru/image5.png

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

0075_The_problem_of_bad_links_ru/image6.png

Если в базе такой ссылки нет, то создается новая пара и генерируется новая короткая ссылка:

0075_The_problem_of_bad_links_ru/image7.png

Технически запись хранится в базе данных в таблице links и представляет собой набор следующих полей:

  • id – первичный ключ
  • num – номер ссылки, как раз по этому номеру определяется какую ссылку достанет из базы скрипт qwerty.php
  • link – собственно сам текст ссылки
  • link_category_id – номер категории в которой находится ссылка, для работы скрипта это поле несущественно, но для удобства пользователя введены категории ссылок

При нажатии кнопки "Generate" сайту viva64.com посылается запрос, содержащий адрес ссылки, которую необходимо добавить. Скрипт обрабатывающий запрос выглядит примерно так:

$sql = "select * from links where link='".$add_url."'";
$link = mysql_query($sql);
if(mysql_num_rows($link)){
    $row = mysql_fetch_array($link,MYSQL_ASSOC);
    $new_url = "http://www.viva64.com/qwerty.php?url=".$row['num'];
}
else{
    $sql = "select * from links order by num desc";
    $link = mysql_query($sql);
    $row = mysql_fetch_array($link, MYSQL_ASSOC);
    $last_num = $row['num']+1;
    $sql = "insert into links (num,link) values
           (".$last_num.",'".$add_url."')";
    $link = mysql_query($sql);
    $new_url = "http://www.viva64.com/qwerty.php?url=".$last_num;
}

Скрипт получает этот адрес переменной $add_url и проверяет, есть ли в базе данных такой адрес:

$sql = "select * from links where link='".$add_url."'";
$link = mysql_query($sql);

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

if(mysql_num_rows($link)){
    $row = mysql_fetch_array($link,MYSQL_ASSOC);
    $new_url = "http://www.viva64.com/qwerty.php?url=".$row['num'];
}

Если же адрес не найден, то произойдет вычисление максимального уникального идентификатора адреса из тех, что содержаться в таблице links и добавление новой записи в базу данных с инкрементированным максимальным идентификатором, после чего в переменную $new_url записывается значение новой ссылки для вызова скрипта перенаправления:

else{
    $sql = "select * from links order by num desc";
    $link = mysql_query($sql);
    $row = mysql_fetch_array($link, MYSQL_ASSOC);
    $last_num = $row['num']+1;
    $sql = "insert into links (num,link) values
             (".$last_num.",'".$add_url."')";
    $link = mysql_query($sql);
    $new_url = "http://www.viva64.com/qwerty.php?url=".$last_num;
}

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

Механизм перенаправления

Скрипт перенаправления на сайте viva64.com не сложен. По сути все, что он делает, это принимает номер ссылки в качестве параметра, затем получает из базы данных саму ссылку с таким номером и осуществляет переадресацию по ссылке. В коде это выглядит:

$s = substr($HTTP_GET_VARS['url'], 0, 15);
$u = "http://www.viva64.com/";
$isConnect = mysql_connect($sqlserver,$sqluser,$sqlpassword);
if($isConnect){
    $isSelectDatabase = mysql_select_db($database);
    if($isSelectDatabase){
         $currentLink = $s;
         $sql = "SELECT * FROM links WHERE num='".$currentLink."'";
         $link = mysql_query($sql);
         if($link && mysql_num_rows($link)){
           $row = mysql_fetch_array($link,MYSQL_ASSOC);
           $u = $row['link'];
         }
    }
}
print Header('Location: '.$u);

Поиск и исправление неработающих ссылок

Задача поиска неработающих ссылок решается средствами программы Fast Link Checker. Программа обходит все страницы сайта и пытается пройти по всем найденным ссылкам. Затем результаты фильтруются и, на заранее заданные e-mail адреса, отправляется письмо со списком неработающих ссылок. Запуск программы автоматизирован, раз в неделю происходит проверка работоспособности ссылок.

После определения неработающей ссылки вручную осуществляется поиск материала, на который указывает ссылка. Обычно можно легко определить новый адрес ,по которому доступен материал. На таких сайтах как Microsoft, Intel, AMD очень любят просто перенести материал в другой раздел.

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

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

Для изменения ссылки через интерфейс администратора будет выполнен запрос вида:

UPDATE 'links' SET
 'link' = 'http://msdn.microsoft.com/en-us/isv/bb190527.aspx' 
WHERE 
 'links'.'numn = 341 LIMIT 1 ;

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

Заранее спасибо тем, кто захочет тоже немного улучшить мир.

Популярные статьи по теме
Как и почему статические анализаторы борются с ложными срабатываниями

Дата: 20 Мар 2017

Автор: Андрей Карпов

В своей предыдущей статье я писал, что мне не нравится подход, при котором статические анализаторы кода оцениваются с помощью синтетических тестов. В статье приводился пример, воспринимаемый анализат…
Любите статический анализ кода!

Дата: 16 Окт 2017

Автор: Андрей Карпов

Я в шоке от возможностей статического анализа кода, хотя сам участвую в разработке инструмента PVS-Studio. На днях я был искренне удивлён тому, что анализатор оказался умнее и внимательнее меня.
Зло живёт в функциях сравнения

Дата: 19 Май 2017

Автор: Андрей Карпов

Возможно, читатели помнят мою статью под названием "Эффект последней строки". В ней идёт речь о замеченной мной закономерности: ошибка чаще всего допускается в последней строке однотипных блоков текс…
Статический анализ как часть процесса разработки Unreal Engine

Дата: 27 Июн 2017

Автор: Андрей Карпов

Проект Unreal Engine развивается - добавляется новый код и изменятся уже написанный. Неизбежное следствие развития проекта - появление в коде новых ошибок, которые желательно выявлять как можно раньш…
Характеристики анализатора PVS-Studio на примере EFL Core Libraries, 10-15% ложных срабатываний

Дата: 31 Июл 2017

Автор: Андрей Карпов

После большой статьи про проверку операционной системы Tizen мне было задано много вопросов о проценте ложных срабатываний и о плотности ошибок (сколько ошибок PVS-Studio выявляет на 1000 строк кода)…
PVS-Studio ROI

Дата: 30 Янв 2019

Автор: Андрей Карпов

Время от времени нам задают вопрос, какую пользу в денежном эквиваленте получит компания от использования анализатора PVS-Studio. Мы решили оформить ответ в виде статьи и привести таблицы, которые по…
Главный вопрос программирования, рефакторинга и всего такого

Дата: 14 Апр 2016

Автор: Андрей Карпов

Вы угадали, ответ - "42". Здесь приводится 42 рекомендации по программированию, которые помогут избежать множества ошибок, сэкономить время и нервы. Автором рекомендаций выступает Андрей Карпов - тех…
Эффект последней строки

Дата: 31 Май 2014

Автор: Андрей Карпов

Я изучил множество ошибок, возникающих в результате копирования кода. И утверждаю, что чаще всего ошибки допускают в последнем фрагменте однотипного кода. Ранее я не встречал в книгах описания этого …
PVS-Studio для Java

Дата: 17 Янв 2019

Автор: Андрей Карпов

В седьмой версии статического анализатора PVS-Studio мы добавили поддержку языка Java. Пришло время немного рассказать, как мы начинали делать поддержку языка Java, что у нас получилось и какие дальн…
Бесплатный PVS-Studio для тех, кто развивает открытые проекты

Дата: 22 Дек 2018

Автор: Андрей Карпов

В канун празднования нового 2019 года команда PVS-Studio решила сделать приятный подарок всем контрибьюторам open-source проектов, хостящихся на GitHub, GitLab или Bitbucket. Им предоставляется возмо…

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

Следующие комментарии

На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Этот сайт использует куки и другие технологии, чтобы предоставить вам более персонализированный опыт. Продолжая просмотр страниц нашего веб-сайта, вы принимаете условия использования этих файлов. Если вы не хотите, чтобы ваши данные обрабатывались, пожалуйста, покиньте данный сайт. Подробнее →
Принять