Пере­именование якоря без поломки внешних ссылок

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

  • полное изменение схемы URL-адресов на всём сайте;
  • замена мнемо­нического фрагмента «человеко­читаемого» URL-адреса отдельной страницы на более удачный;
  • пере­мещение страницы в другой раздел.

Для веб-страницы или файла это решается внешним пере­напра­влением (редиректом) с прежнего адреса на новый с помощью HTTP-заголовка ответа сервера Location в сочетании с HTTP-статусом 301 Moved Permanently.

Но что делать, если адрес изменился из-за пере­имено­вания якоря (хэша)? Якоря основаны на исполь­зовании иденти­фикаторов (атрибутов id) элементов. Например, переход по ссылке #h-foo авто­мати­чески прокрутит страницу к элементу с иденти­фикатором h-foo, если такой элемент есть на странице.

В атрибут id можно поместить только один иденти­фикатор. Поэтому при изменении иденти­фикатора сохранить работо­способность старых ссылок можно созданием пустого семантически нейтрального элемента SPAN с прежним иденти­фикатором и вставкой его в начало исходного элемента:

Было:
<h2 id="h-foo">Example</h2>
Стало:
<h2 id="h-bar"><span id="h-foo"></span>Example</h2>

Благодаря этому ссылки на прежний якорь — #h-foo — останутся работо­способными.