Е

Техническое руководство проекта secserpr.ru

Как собирался сайт — по шагам, с кодом и пояснениями
← На сайт
Руководство › Часть IV. Страницы сайта › 19. 404.html

19. 404.html — страница ошибки

Последняя страница сайта. По скелету — та же схема, что у предыдущих: partials, SSI-инклюды, кнопка «Наверх», два скрипта. Но у неё три технических особенности, которые больше нигде на сайте не встречаются.

Что нового в техническом плане

Первое: страница содержит <meta name="robots" content="noindex"> — единственная на сайте. Второе: используется .hero-title — класс, который был только на главной. Третье: четыре ссылки на разделы сайта собраны в одном ul — единственное место с такой «картой сайта» внутри страницы.

Как открывается страница

404.html — не обычная страница. Пользователь не переходит на неё по ссылке. Она подставляется сервером, когда запрошенный адрес не найден.

Механизм подстановки
Пользователь вводит:
  https://secserpr.ru/nepravilnyj-adres.html

Сервер не находит файл. Срабатывает правило
из .htaccess:

  ErrorDocument 404 /404.html

Сервер отдаёт СОДЕРЖИМОЕ файла /404.html
с кодом ответа 404 (страница не найдена).

Пользователь видит нашу страницу с объяснением
и ссылками. Поисковик получает код 404 —
значит, не индексирует страницу.

Строка ErrorDocument 404 /404.html уже разбиралась в разделе 02. Здесь — обратная сторона: как эта настройка влияет на саму страницу.

Внимание: код 404 сохраняется

Даже при том, что сервер подставляет нашу красивую страницу, HTTP-код остаётся 404. Это критично: поисковик правильно понимает, что страница не найдена, и не индексирует её. Если бы код был 200 (как при обычном URL), поисковик считал бы «страница существует» и добавил бы её в базу. Это классическая ошибка.

Уникальные мета

404.html — мета
<title>Страница не найдена – Ефимов Андрей Михайлович</title>
<meta name="description" content="Запрошенная страница не найдена. Вернитесь на главную или свяжитесь со мной." />

<meta property="og:title" content="Страница не найдена – Ефимов Андрей Михайлович" />
<meta property="og:description" content="Запрошенная страница не найдена." />
<meta property="og:url" content="https://secserpr.ru/404.html" />

<meta name="robots" content="noindex" />

Технические детали:

Скелет страницы

Между header и footer — одна секция. Внутри — заголовок, вводный абзац, CTA-блок, подзаголовок и список ссылок.

404.html — скелет
<body>
<div class="container">

  <header class="header">
    SSI: header.html
    SSI: nav.html
  </header>

  <section>
    h2.hero-title   "404 — страница не найдена"
    p.text-block.hero-lead
    div.cta-block
      strong
      br
      a.btn (На главную)
    h3.section-subtitle  "Популярные разделы"
    ul
      li × 4 со ссылками
  </section>

  SSI: footer.html

</div>

button#scrollToTopBtn
script.js
scroll-top.js
</body>

Заголовок .hero-title

404.html — заголовок
<h2 class="hero-title">404 — страница не найдена</h2>

Второе место на сайте, где используется .hero-title. Первое — index.html. Это класс с правилами из Секции 3 style.css:

style.css — .hero-title
.hero-title {
  border-left: none;
  padding-left: 0;
  font-size: 2.4rem;
  margin-bottom: 25px;
}

Что это значит технически:

Почему .hero-title на 404, а не на 13 других страницах

Изначально .hero-title придуман для главной: крупный заголовок, который «заявляет» сайт. На 404 он используется по другой логике: цифра «404» должна быть визуально доминирующей — пользователь должен сразу понять, что попал не туда. Это не «герой-заголовок» в исходном смысле, но технически стиль тот же.

Вводный абзац .text-block.hero-lead

404.html — абзац
<p class="text-block hero-lead">
  Возможно, страница была перемещена, удалена или вы
  ошиблись в адресе. Ничего страшного — вернитесь
  на главную или выберите раздел ниже.
</p>

Снова два класса через пробел, как на index.html:

Эта пара классов встречается на сайте дважды: на главной и здесь. Больше нигде.

CTA-блок с кнопкой

404.html — CTA с кнопкой
<div class="cta-block">
  <strong>Куда дальше?</strong><br />
  <a href="/index.html" class="btn" style="margin-top: 15px;">На главную</a>
</div>

Стандартный .cta-block, но с двумя особенностями.

Кнопка внутри CTA

Внутри блока — ссылка с классом .btn. Такой же приём был на index.html, но там кнопка была отдельным элементом после секции-героя. Здесь — внутри CTA-блока.

Инлайн-стиль style="margin-top: 15px;"

Атрибут style
<a href="/index.html" class="btn" style="margin-top: 15px;">

Единственный инлайн-стиль на весь сайт. Все остальные стили — в style.css. Здесь — исключение: атрибут style прямо в HTML.

Технически это работает: инлайн-стиль имеет наивысший приоритет и переопределяет любые правила из CSS-файлов. Но у этого решения есть минусы:

Внимание: инлайн-стиль — исключение, не правило

Правило проекта — все стили в style.css. Здесь сделано исключение, потому что это единичный случай: одна кнопка, один отступ. Если бы такое повторялось — стоило бы завести класс. Но ради одной строки создавать класс в CSS-файле — перебор. Инлайн-стиль оправдан, когда он не повторяется.

Подзаголовок и список ссылок

404.html — «Популярные разделы»
<h3 class="section-subtitle" style="margin-top: 35px;">
  Популярные разделы
</h3>
<ul>
  <li><a href="/services.html">Услуги</a> — четыре направления работы.</li>
  <li><a href="/offer.html">Коммерческое предложение</a> — тарифы и этапы.</li>
  <li><a href="/projects.html">Кейсы</a> — примеры из практики.</li>
  <li><a href="/contacts.html">Контакты</a> — телефон и e-mail.</li>
</ul>

Второй инлайн-стиль

Инлайн на h3
<h3 class="section-subtitle" style="margin-top: 35px;">

Ещё один инлайн-стиль. У .section-subtitle по умолчанию margin-bottom: 18px, но нет margin-top — он наследуется от базового h3: margin: 20px 0 10px 0. Нужно было 35 пикселей сверху, чтобы отделить список от CTA-блока выше. Решили инлайном.

Итого на 404.html — два инлайн-стиля. Больше ни на одной странице сайта их нет.

Список ссылок как «мини-карта сайта»

Четыре li, каждый — «ссылка + тире + пояснение»:

Структура одного li
<li><a href="/services.html">Услуги</a> — четыре направления работы.</li>
     └─ ссылка ─┘                  └─ тире + текст ─┘

Технически обычный ul из четырёх li. Никаких классов. Но по смыслу — это дублирование навигации: те же разделы есть в меню nav.html. Зачем дублировать? Потому что на 404 пользователь «потерялся». Меню сверху он может не заметить, а список прямо в секции — увидит.

Особенность: ссылки на 404 без класса .btn

Ссылки в списке — обычные <a> без класса. Стилизуются правилом .manual-content a... — в основном style.css для сайта это a { color: #2b6f9c; text-decoration: none; } и подчёркивание при наведении. Не путать с кнопкой .btn выше — там оформление «кнопкой», здесь — обычная ссылка в тексте.

Полный чек-лист страницы

Особенности 404.html
Что                                    Значение
------------------------------------   ----------------------------
Открывается по адресу                   ЛЮБОМУ несуществующему
Способ открытия                         ErrorDocument 404 /404.html
HTTP-код ответа                         404 (не 200!)
meta robots                             noindex (единственная)
.hero-title                             Второе место (первое — index)
.text-block.hero-lead                   Второе место (первое — index)
.cta-block                              Есть
Кнопка .btn внутри .cta-block           Есть
.section-subtitle                       Есть
Инлайн-стили                            2 (единственные на сайте)
Список ul с четырьмя ссылками           Есть (единственная такая)
.highlight-box                          Нет
.grid-2 / grid-3 / grid-4               Нет
.card                                   Нет

Сравнение по классам

Все страницы сайта
                          ind  serv  abt  prj  off  cnt  prv  404
------------------------  ---  ----  ---  ---  ---  ---  ---  ---
секций                      3     1    2    1    1    1    1    1
.grid-2                     -     +    -    -    -    -    -    -
.grid-3                     -     -    -    +    +    -    -    -
.grid-4                     -     -    +    -    -    -    -    -
.card                       -     +    +    +    +    -    -    -
.contacts-*                 -     -    -    -    -    +    -    -
.price-*                    -     -    -    -    +    -    -    -
.legal-note                 -     -    -    -    +    -    -    -
.highlight-box              -     -    +    -    +    -    +    -
.cta-block                  +     +    -    -    +    +    -    +
.section-subtitle           +     -    +    -    +    -    -    +
.hero-title                 +     -    -    -    -    -    -    +
.hero-lead                  +     -    -    -    -    -    -    +
.text-block                 +     +    +    +    +    -    +    +
meta robots="noindex"       -     -    -    -    -    -    -    +
inline style                -     -    -    -    -    -    -    +

Что видно из таблицы:

Итог

Все восемь страниц сайта разобраны. Следующий — последний содержательный раздел: 20. SEO и служебное. Разберём robots.txt, sitemap.xml, og-image и код Метрики в footer.html — то, что живёт вне страниц, но обеспечивает видимость сайта в поиске.