Использование заголовков H1 и H2 в редакторе

При использовании заголовка первого уровня в Markdown (#) в теме, будет ли это результатом h1 или h2 в HTML-выводе?

1 лайк

Это выведет тег <h1> :slight_smile:

1 лайк

Так значит, Discourse считает, что на странице нормально иметь несколько тегов <h1>? Казалось бы, если заголовок темы — это h1, то заголовки первого уровня внутри этой темы по умолчанию должны быть h2, верно?

1 лайк

Discourse не делает никаких предположений — он выводит именно то, что вы от него запросили.
Более правильным подходом является использование ### для заголовков первого уровня внутри сообщения, а не ## :slight_smile:

редактирование: см. Use of H1 vs. H2 headings in composer - #16 by Canapin

2 лайка

Это, безусловно, тот случай «обучения пользователей», который, как мне кажется, можно было бы избежать, если бы # не соответствовал заголовку первого уровня… :anxious_face_with_sweat:

Вы знаете, есть ли способ это изменить? Или хотя бы скрыть заголовки первого уровня в панели инструментов? (Предполагаю, что люди, пишущие напрямую в Markdown, — это реалистичная целевая аудитория для обучения…)

1 лайк

Да, это довольно просто. Элемент списка имеет атрибут data-name="heading-1", который можно использовать в CSS :slight_smile:

1 лайк

Хе-хе — я как раз тоже этим занимался. В быстрой проверке это скрывает опцию H1 как в редакторе Markdown, так и в редакторе с форматированием:

button[data-name="heading-1"] {
  display: none;
}

(Возможно, я просто оставлю это! Не вижу особого смысла предлагать H1 в редакторе.)

2 лайка

Я понимаю вашу точку зрения, но это не решение, которое Discourse принял в ту или иную сторону. Discourse следует спецификации CommonMark — это стандарт разметки Markdown, который предписывает преобразовывать символ # в тег H1. На мой взгляд, эта практика преобразования заголовков Markdown в HTML-теги является общепринятой в рамках основных спецификаций Markdown.

2 лайка

Ну, два заголовка <h1> на самом деле не такая уж большая проблема. Это очень старый SEO-мем, который уже давно не является актуальным вопросом. Google и другие поисковики используют первый заголовок или любой другой, который сочтут наиболее подходящим.

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

Тем не менее, в сообщениях более уместно использовать ##/<h2>. Но поскольку это не играет никакой реальной роли, я считаю, что лучше, чтобы пользователи использовали какие-то заголовки, чтобы избежать их, опасаясь использовать «неправильные» заголовки :man_shrugging:

2 лайка

Headings may only be a small signal for SEO today – but I still dislike multiple H1s because I’m a nerd. :nerd_face:

I’m also thinking about how Steph is creating printable documentation for Page Publishing, where H1s in the post are rendering even larger than the page top H1:

image

Making those H2 would keep them slightly smaller than the top H1:

image

1 лайк

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

(Кстати: документ отображается у тебя на английском языке без твоего вмешательства?!)

That’s natural, yes, and it makes sense when you’re building a web page from scratch. But a CMS or publishing system almost always gets the page’s H1 from a title field, so you’d typically reach for H2 for the content sections.

(And I used the web browser’s translation tool to get English.)

1 лайк

I agree. But we shouldn’t expect community members to have to know that, imho

Да — и я не вижу никаких недостатков в том, чтобы просто скрыть опцию H1.

Хотя я не замечаю, чтобы большинство пользователей, создающих типичные посты, часто использовали заголовки. Участники, создающие более длинные темы с документацией, вероятно, уже имеют (или быстро приобретут) немного больше опыта работы с ## и значком «TT».

2 лайка

Кстати: я только что обратил внимание на эту интересную старую дискуссию, где предлагается использовать заголовки только в темах и запретить их в ответах: Отключить заголовки в ответах, такие как h1 и h2

Если это интересно кому-то, вот небольшой фрагмент кода, который полностью скрывает иконку заголовка “TT” в редакторе только при ответе:

.composer-action-reply button.heading {
  display: none;
}
1 лайк

Заголовки нужны не только для SEO, но и для доступности.

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

У тем есть свои заголовки <h1>, но к каждому ответу автоматически добавляется свой скрытый <h2>, который виден скринридерам:

<h2 aria-hidden="false" class="sr-only" id="post-heading-9">
  post by Jagster 4 hours ago
</h2>

Таким образом, в любом случае, когда вы размещаете в своём контенте заголовок <h1> или <h2>, он всегда будет потомком уже существующего <h2> :upside_down_face:

По-моему, использование в посте заголовков выше уровня <h3> может сделать навигацию через скринридер немного странной.

Хотя в существующих темах это не всегда последовательно, шаблон поста из Customization > Plugin использует <h3> в качестве верхних заголовков:

| | | |
| - | - | - |
| :information_source: | **Summary** | In a few words, what does this plugin do? |
| :hammer_and_wrench: | **Repository Link** | <> |
| :open_book: | **Install Guide** | [How to install plugins in Discourse](https://meta.discourse.org/t/install-plugins-in-discourse/19157) |

<br>  

### Features
 
Describe the major features of the plugin
 
### Configuration

Include detailed steps on how to configure the plugin (include screenshots where necessary)

### Settings 
 
Include a table of settings and setting descriptions

| Name | Description
|-|-|
|

Интересно, что для шаблонов Customization > Theme и Customization > Theme component это не так, но в их шаблонах вообще нет заголовков. Возможно, это стоит исправить.

4 лайка

Согласен. Я тоже немного ботаник и люблю, чтобы иерархия заголовков была чистой.
Так что на самом деле в посте мы должны использовать только h3, h4, h5, если хотим всё сделать правильно. Было бы интересно создать какой-то компонент темы, который это «исправит»: это означало бы удаление уровней заголовков выше из кнопок и «перевод» стилей для h3 и ниже в темах, чтобы они выглядели корректно при использовании…?

Также есть h6, если вам нужен ещё один уровень в постах, но он очень маленький

H5 тоже меньше обычного текста в посте, поэтому я не уверен, что стал бы его использовать

это h5
2 лайка

А, я этого не знал! Вероятно, это объясняет комментарий Паффмана о том, что «заголовок первого уровня в сообщении должен быть h3» [1]

Тогда CSS-хак будет выглядеть так:

button[data-name="heading-1"], button[data-name="heading-2"] {
  display: none;
}

Спасибо за внимание к доступности — я стараюсь учитывать это в своей работе.


  1. источник ↩︎

3 лайка

Вы, безусловно, можете изменить стили для H3–5… или, возможно, они подходят и как есть:

2 лайка