Перейти к содержанию

Перелинковка учебника и доступность старых уроков

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

Продолжим вымышленный пример на https://example.com: главная A, старый урок B, новая статья C и общий каталог D по адресу /catalog/. Их технические свойства уже согласованы в учебном сценарии, а сведения о действительной индексации по-прежнему нужно получать отдельно. Результат этого урока — понятная навигация, которая сохраняет старый адрес B и ведёт к разным материалам по их собственным URL.

Ссылка как часть объяснения

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

Поэтому начнём с вопроса о назначении перехода. Если в статье C рассказывается о переносе готовой библиотеки, ссылка на старый урок B может показать пример сохранённого адреса. Но если текст объясняет только синтаксис Markdown, произвольная ссылка на LINQ не становится полезной из-за того, что обе страницы находятся на одном сайте.

Рассмотрим фрагмент учебной статьи C, где B используется именно как пример наследуемого маршрута:

<p>
  После переноса сохраняем прежние адреса материалов.
  Например, урок
  <a href="/my/LINQ/linq_xml/level7/7_1.php">«Запросы LINQ to XML»</a>
  остаётся доступным по своему URL с окончанием .php.
</p>

Здесь окружающий текст объясняет связь двух страниц. Сама ссылка сообщает название урока. Если читатель её откроет, он увидит именно упомянутый материал, а не общий список, форму поиска или новую копию старого текста.

Текст внутри ссылки называют анкором. Google рекомендует делать его понятным, достаточно кратким и соответствующим целевой странице. Для обычного перехода нужен элемент <a> с атрибутом href; обработчик на кнопке или надписи не служит надёжной заменой такой ссылки. Рекомендации Google по ссылкам.

Сравните два варианта анкора: «нажмите здесь» и «Запросы LINQ to XML». Второй помогает выбрать материал ещё до перехода. Однако превращать анкор в набор поисковых формулировок тоже не нужно. Название темы и смысл соседнего предложения обычно дают достаточно информации без длинного перечисления ключевых слов.

Путь от главной к материалу

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

A: главная
└── D: общий каталог
    ├── B: сохранённый урок LINQ to XML
    └── C: статья о статическом сайте

Статья C после прошлого урока уже находится в каталоге. Теперь проверим обратный переход: может ли человек, попавший сразу на C, открыть D и увидеть остальные материалы? Для этого полезны хлебные крошки или ссылка на раздел рядом с заголовком. Старый урок B также должен сохранять доступ к своим оглавлениям.

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

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

Сам факт существования ссылки в любом HTML-файле ещё не доказывает достижимость от главной. Две изолированные статьи могут ссылаться друг на друга и оставаться отдельным островом. Поэтому для C проверяем целиком A → D → C, а не только строку href в D.

Хлебные крошки и соседние уроки

Хлебные крошки показывают положение материала в библиотеке. Для C достаточно начать с реального пути через существующий каталог. Учебный фрагмент может выглядеть так:

<nav aria-label="Хлебные крошки">
  <ol>
    <li><a href="/">Главная</a></li>
    <li><a href="/catalog/">Каталог материалов</a></li>
    <li aria-current="page">Статический сайт из Markdown</li>
  </ol>
</nav>

Последний пункт — название текущей страницы. Он не создаёт ещё один URL и не требует копии статьи внутри папки каталога. Путь публикации C остаётся /articles/markdown-guide.html, хотя библиотека относит её к тематическому разделу.

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

Кнопки предыдущего и следующего урока решают ещё одну задачу — показывают учебную последовательность. Её нельзя выводить только из алфавитной сортировки заголовков или порядка файлов. Например, урок о первой сборке должен предшествовать общим шаблонам, хотя названия при другой сортировке могут расположиться иначе.

В ProfessorWeb последовательность задаётся отдельно от рубрикации каталога. Это позволяет перестроить тематические разделы и одновременно сохранить прежний порядок обучения. При редакционной сверке откройте первый, промежуточный и последний материалы курса. У первого не должно появляться выдуманного предшественника, а у последнего — ссылки на отсутствующий урок.

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

Сохранённый URL и лишние варианты

Теперь вспомним G: тот же старый урок с параметром ?from=menu. В учебном сценарии его canonical уже указывает на B. Внутренние ссылки также следует направить на B, если параметр не нужен для работы страницы. Тогда меню, оглавление и Sitemap согласованно показывают выбранный адрес.

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

Адрес H сохраняет перенаправление на B, чтобы старые внешние ссылки продолжали работать. Во вновь создаваемой навигации используйте сразу B. Обновление ссылок не требует удаления самого перенаправления: оно остаётся полезным для посетителя с сохранённой закладкой.

Для удалённого F подход иной. Если замены нет, уберите ссылку из действующего списка, а не направляйте её на главную страницу. Каталог должен обещать существующий материал. Если появилась содержательная замена, решение о переносе и перенаправлении принимается по соответствию содержания, а не по желанию избежать любой ошибки 404.

Это также помогает обнаружить разрыв между исходниками и опубликованной библиотекой. Если статья есть в редакционном плане, но пока является черновиком, не добавляйте в публичное оглавление ссылку на ещё не выпущенный URL. Для автора можно сохранить отдельное оглавление Markdown-файлов; читательское оглавление должно соответствовать доступным страницам.

Разные статьи на одну тему

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

Рассмотрим C и B. Это разные материалы: C объясняет устройство статического сайта, B — запросы LINQ to XML. Связь через пример переноса не делает один канонической версией другого. У каждой статьи сохраняются собственный адрес, название и входящие ссылки.

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

Для читателя разницу можно показать прямо в каталоге. После названия C добавьте короткое описание: «Перенос материалов в Markdown и общие шаблоны». У B будет другое: «Отбор элементов XML с помощью LINQ». Такие пояснения помогают выбрать нужный материал без добавления новой копии текста.

Наблюдение за связями библиотеки

Для маленького стенда достаточно пройти путь A → D → B и A → D → C, затем проверить возвращение к каталогу. В своей рабочей таблице запишите страницу-источник, целевой URL и место ссылки. Отдельно укажите, обнаружена ли ссылка в HTML и соответствует ли название открывшемуся материалу.

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

Не интерпретируйте такую сверку как доказательство включения в индекс. Теперь мы знаем, что C доступна из каталога, B сохранила свой адрес, а ссылки не ведут через G или H без необходимости. Следующий шаг — сопоставить исправления с новыми наблюдениями инструментов и отдельно оценить изменения поисковых показов и переходов.