Подтвердить что ты не робот

Разметка списка результатов поиска с использованием семантики HTML5

Создание списка результатов поиска (например, в Google) не очень сложно, если вам просто нужно что-то, что работает. Теперь, однако, я хочу сделать это с совершенством, используя преимущества семантики HTML5. Цель состоит в том, чтобы определить defacto способ маркировки списка результатов поиска, который потенциально может быть использован любой будущей поисковой системой.

Для каждого удара я хочу

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

Моя первая идея выглядит примерно так:

<ol>
  <li>
    <article>
      <header>
        <h1>
          <a href="url-to-the-page.html">
            The Title of the Page
          </a>
        </h1>
      </header>
      <p>A short summary of the page</p>
      <footer>
        <dl>
          <dt>Categories</dt>
          <dd>
            <nav>
               <ul>
                  <li><a href="first-category.html">First category</a></li>
                  <li><a href="second-category.html">Second category</a></li>
                </ul>
            </nav>
          </dd>
          <dt>File size</dt>
          <dd>2 kB</dd>
          <dt>Published</dt>
          <dd>
            <time datetime="2010-07-15T13:15:05-02:00" pubdate>Today</time>
          </dd>
        </dl>
      </footer>
    </article>
  </li>
  <li>
    ...
  </li>
  ...
</ol>

Я не очень-то доволен <article/> в <li/>. Во-первых, результат поиска - это не статья сама по себе, а просто краткое резюме. Во-вторых, я даже не уверен, что вам разрешено помещать статью в список.

Возможно, теги <details/> и <summary/> более подходят, чем <article/>, но я не знаю, могу ли я добавить <footer/> внутри этого?

Все предложения и мнения приветствуются! Я действительно хочу, чтобы каждая деталь была идеальной.

4b9b3361

Ответ 1

1) Я думаю, что вы должны придерживаться элемента article, поскольку

Элемент

[t] he article представляет собой автономная композиция в документ, страница, приложение или сайт и это должно быть независимо распределяемые или reusable [источник]

У вас есть только список отдельных документов, поэтому я считаю, что это вполне уместно. То же самое можно сказать и для первой страницы блога, содержащей несколько сообщений с заголовками и контурами, каждый в отдельном элементе article. Кроме того, если вы намереваетесь процитировать несколько предложений статей (вместо предоставления резюме), вы можете даже использовать элементы blockquote, например, в пример сообщение форума, показывающее исходные сообщения, на которые пользователь отвечает.

2) Если вам интересно, разрешено ли включать элементы article внутри элемента li, просто подайте его в валидатор. Как вы можете видеть, это разрешено. Более того, поскольку Рабочий проект говорит:

Контексты, в которых этот элемент может быть используется:

Где ожидается поток содержимого.

3) Я бы не использовал элементы nav для этих категорий, так как эти ссылки не являются частью основной навигации по странице:

только те разделы, которые состоят из основных блоков навигации, подходят для элемента nav. В частности, для нижних колонтитулов обычно имеется короткий список ссылок на различные страницы сайта, такие как условия обслуживания, домашняя страница и страница с авторскими правами. Для таких случаев достаточно элемента footer без элемента nav. [источник]

4) Не используйте элементы details и/или summary, поскольку они используются как часть interactive элементов и не предназначены для простых документов.

ОБНОВЛЕНИЕ: Относительно того, полезно ли использовать (un) упорядоченный список для представления результатов поиска:

Элемент ul представляет список пунктов, где порядок позиций не важно - то есть, где изменение порядка не будет существенно изменить смысл документ. [источник]

Как список результатов поиска на самом деле является списком, я думаю, что это подходящий элемент для использования; однако, поскольку мне кажется, что порядок важен (я ожидаю, что наилучший результат совпадения будет в верхней части списка), я думаю, что вместо этого вы должны использовать упорядоченный список (ol):

Элемент ol представляет список предметы, где предметы были преднамеренно упорядоченным, так что изменение порядка изменит смысл документа. [источник]

С помощью CSS вы можете просто скрыть числа.

EDIT:. Я просто понял, что вы уже используете ol (из-за моей усталости, я думал, что вы использовали ul). Я оставлю свое "обновление как есть"; в конце концов, это может быть полезно кому-то.

Ответ 2

Я бы разметил его таким образом (без использования каких-либо словарей или микроформатов RDFa/microdata, поэтому используйте только то, что дает простая спецификация HTML5):

<ol start="1">

  <li id="1">
    <article>
     <h1><a href="url-to-the-page.html" rel="external">The Title of the Page</a></h1>
     <p>A short summary of the page</p>
     <footer>
       <dl>
         <dt>Categories</dt>
         <dd><a href="first-category.html">First category</a></dd>
         <dd><a href="second-category.html">Second category</a></dd>
         <dt>File size</dt>
         <dd>2 <abbr title="kilobyte">kB</code></dd>
         <dt>Published</dt>
         <dd><time datetime="2010-07-15T13:15:05-02:00">Today</time></dd>
        </dl>
      </footer>
    </article>
  </li>

  <li id="2">
    <article>
     …
    </article>
  </li>

</ol>

start для ol

Если поисковая система использует разбиение на страницы, вы должны придать атрибуту start ol, чтобы каждый li отображал правильную позицию ранжирования.

id для каждого li

Каждый li должен получить атрибут id, чтобы вы могли ссылаться на него. Значение должно быть ранг/позиция.

Можно подумать, что id следует указывать на article вместо этого, но я думаю, что это было бы неправильно: ранжирование/порядок могли меняться со временем. Вы не имеете в виду конкретный результат, а результат.

Удалите header

Он не нужен, если он содержит только заголовок (h1).

Добавьте rel="external" в ссылку

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

Удалите nav

Ссылки категории не являются навигацией в области article. Поэтому удалите nav.

Каждая категория в dd

Вы использовали:

<dt>Categories</dt>
<dd>
 <ul>
  <li><a href="first-category.html">First category</a></li>
  <li><a href="second-category.html">Second category</a></li>
 </ul>
</dd>

Вместо этого вы должны перечислить каждую категорию в своем собственном dd и удалить ul:

<dt>Categories</dt>
<dd><a href="first-category.html">First category</a></dd>
<dd><a href="second-category.html">Second category</a></dd>

abbr для размера файла

Блок в "2 кБ" должен быть помечен abbr:

2 <abbr title="kilobyte">kB</code>

Удалить атрибут pubdate

Это больше не в спецификации.

Другие действия, которые могут быть выполнены

  • присвоить ссылку hreflang ссылке, если связанный результат имеет другой язык, чем поисковая система
  • укажите атрибут lang для описания ссылки и сводки, если он находится на другом языке, чем поисковая система
  • summary: используйте blockquote (с атрибутом cite) вместо p, если поисковая система не создает сама сводка, но использует мета-описание или фрагмент со страницы.
  • описание заголовка/ссылки: используйте q (с атрибутом cite), если описание ссылки - это точно название со связанной веб-страницы.

Ответ 3

Я нашел хороший ресурс для HTML5 HTML5Doctor. Проверьте архив статей для практических реализаций новых тегов. Не полная ссылка ума, но достаточно приятная, чтобы облегчить это:)

Как показано на странице Footer element, разделы могут содержать нижние колонтитулы:)

Ответ 4

Намерение для "идеального" шаблона HTML5 бесполезно, потому что сама спецификация далека от совершенства, причем большинство предписанных вариантов использования для новых "семантических" элементов в лучшем случае неясны. Пока ваш документ структурирован логически, у вас не будет проблем с поисковыми системами (большинство новых тегов не имеют ни малейшего влияния). Действительно, следуя спецификации HTML5 в письме - например, используя теги <h1> в каждом новом элементе секционирования - может сделать ваш сайт менее доступным (например, для чтения с экрана). Не стремись к "совершенному" или близкому, потому что его не существует - HTML5 недостаточно продуман для этого. Просто сосредоточьтесь на том, чтобы ваша разметка была логичной и незагроможденной.