HTML5에서 h1을 올바르게 사용하는 방법


78

다음 중 페이지를 구성하는 올바른 방법은 무엇입니까?

1) h1에서만header

<header>
    <h1>Site title</h1>
    <nav>...</nav>
</header>
<section>
    <h2>Page title</h2>
</section>

내가 사용하는 경우 h1에만 내부 header사이트의 제목으로, 모든 페이지에 대한 동일한 콘텐츠해야합니다 h1태그를. 그다지 유익하지 않은 것 같습니다.


2) h1에서 header하고 section, 두 사이트와 페이지 제목

<header>
    <h1>Site title</h1>
    <nav>...</nav>
</header>
<section>
    <h1>Page title</h1>
</section>

또한 및 태그 h1모두에서 두 번 이상 사용하는 예를 보았습니다 . 그러나 같은 페이지에 두 개의 제목이있는 것은 잘못이 아닙니까? 이 예는 여러 헤더 및 태그 http://orderlist.com/resources/html-css/structural-tags-in-html5/ 를 보여줍니다.headersectionh1


3) h1에서만 section, 페이지 제목을 강조

<header>
    <p>Site title</p>
    <nav>...</nav>
</header>
<section>
    <h1>Page title</h1>
</section>

마지막으로 W3 h1는 기본 section요소 내에서 사용을 권장하는 것 같습니다. 즉, 요소에서 사용하지 말아야 header합니까?

섹션에는 모든 등급의 제목이 포함될 수 있지만 작성자는 h1 요소 만 사용하거나 섹션의 중첩 수준에 적합한 등급의 요소를 사용하는 것이 좋습니다.


5
주제에 대한 흥미로운 읽기 : iheni.com/html-5-to-the-h1-debate-rescue
마이클 재스퍼

답변:


58

내 의견에 언급하고 W3C에서 인용했듯이 h1은 제목이 아니라 제목입니다. 각 섹션 요소는 고유 한 제목 요소를 가질 수 있습니다. h1을 페이지의 제목으로 만 생각할 수는 없지만 페이지의 특정 섹션의 제목으로 생각할 수 있습니다. 신문의 첫 페이지와 마찬가지로 각 기사에는 고유 한 제목 (또는 제목)이있을 수 있습니다.

이것에 대한 좋은 기사가 있습니다.


1
알았다. 따라서 HTML5에서 h1을 두 번 이상 사용하는 것이 좋습니다. 기사에서 'HTML 5에서는 탐색, 브랜딩, 저작권 고지와 같은 페이지의 모든 "보조"콘텐츠를 특별히 마크 업할 수 있습니다. 브랜딩에 대한 올바른 마크 업 (로고 + 사이트 제목)은 무엇입니까?
deb

1
가장 논리적 인 것은 선택한 헤더 요소입니다. 모든 섹션에 대한 소개이며 귀하의 경우 전체 페이지입니다. 그 안에는 div, nav, hgroup 등을 사용하여 항목을 그룹화하거나 이미지를 그대로 남겨 둘 수 있습니다.
Rob

2
@ 롭 : 내 질문은? "무엇 '절편 요소를'정의 하는가가있는 것은 실제 수있다 <section>, <article>또는 다른 HTML5 요소 또는 그것과 같을 수 있습니다 <div>A를 section또는 callout클래스?".
tenub

1
@tenub article, aside, nav 및 section은 섹션 요소 인 유일한 요소입니다. 여기에서 모든 내용을 읽을 수 있습니다. developers.whatwg.org/content-models.html#sectioning-content-0
Rob

16

나는 h1전체적으로 사용하는 것이 좋습니다 . 을 h2통해 잊어 버려 h6.

HTML4에서는 6 개의 제목 수준이 섹션을 암시 적으로 정의하는 데 사용되었습니다. 예를 들면

<body>
<h1>This is a top-level heading</h1>
<p>some content here</p>
<h2>This is the heading of a subsection</h2>
<p>content in the subsection</p>
<h2>Another subsection begins here</h2>
<p>content</p>
<h1>another top-level heading</h1>

이제 section요소를 사용하면 다른 제목 수준을 읽는 브라우저에서 만든 암시 적 섹션에 의존하지 않고 섹션을 명시 적으로 정의 할 수 있습니다. HTML5가 탑재 된 브라우저는 section요소 내부의 모든 것이 문서 개요에서 한 수준 씩 "강등" 된다는 것을 알고 있습니다. 예를 들어 a section > h1는 의미 론적으로 an h2, a section > section > h1는 an h3등으로 취급됩니다 .

혼란스러운 점은 브라우저가 여전히h2h6제목 수준 에 따라 암시 적 섹션을 생성 하지만 h2h6요소는 스타일을 변경하지 않는다는 것입니다. 즉 h2, 중첩 된 섹션 수에 관계없이는 여전히 h2(적어도 Webkit에서는) 처럼 나타납니다 . h2예를 들어 레벨 4 제목이어야 한다면 이것은 혼란 스러울 것 입니다.

혼합 h2- h6section매우 예기치 않은 결과를 리드. 그냥 고수하고 명시적인 섹션을 만드는 데 h1사용하십시오 section.

<body>
<!-- optional --><header>
    <h1>This is a top-level heading</h1>
    <p>you may optionally wrap this p and the h1 above it inside a header element.
     the header element doesn't affect the doc outline.
     the section element does, however.</p>
<!-- optional --></header>
<section>
    <h1>even though this is an h1, the browser "treats it" like an h2
        because it's inside an explicit section.
        (it got demoted).</h1>
    <p>content in the subsection</p>
</section>
<section>
    <h1>Another subsection begins here, also treated like an h2</h1>
    <p>content</p>
    <h2>This is misleading. it is semantically treated like an h3.</h2>
    <p>that is because after an h1, an h2 is demoted one level. the h1 above is
        already a "level 2" heading, so this h2 becomes a "level 3" heading.</p>
    <section>
        <h1>just do this instead.</h1>
        <p>it is treated like an h3 because it's in a section within a section.
            (It got demoted twice.)</p>
    </section>
</section>
<h1>another top-level heading</h1>

또한 , 당신은 사용할 수 있습니다 요소를 . 이 요소에는 페이지와 관련된 정보 만 포함되며 탐색 링크, 사이트 머리글 / 바닥 글 등과 같이 사이트 전체에서 반복되는 콘텐츠는 포함되지 않아야합니다.에는 요소 가 하나만 있을 수 있습니다 . 따라서 솔루션은 다음과 같이 간단 할 수 있습니다.<main> <main><body>

<header>
    <h1>Site title</h1>
    <nav>...</nav>
</header>
<main>
    <h1>Page title</h1>
    <p>page content</p>
</main>

마음이 바뀌 었습니다. 당신이 쓴 글을 다시 읽은 후, 당신이 말하려는 요점은 이해하지만 당신의 글이 혼란스러워 보인다. 문자 그대로 취하면 틀린 hx 요소의 강등에 대한 요점과 같이 개요의 맥락에서 어디에서 왔는지 알 수 있습니다.
Rob

<article> 안에 < main>을 중첩 할 수 없습니다 . 논리적으로는 각 기사의 주요 콘텐츠 (예 : 전체 HTML 문서에 여러 블로그 항목의 렌더링이 포함 된 경우 각 블로그 항목의 주요 콘텐츠)를 표시하는 것이 합리적이지만 사양에서는 허용되지 않습니다.
Mikko Rantalainen

7

그러나 접근성 문제를 잊지 마십시오. MDN 에 따르면 , "현재 그래픽 브라우저 또는 보조 기술 사용자 에이전트에서 개요 알고리즘 의 알려진 구현이 없습니다 ." 즉, 스크린 리더는 .NET 만 사용하는 섹션의 상대적 중요성을 파악하지 못할 수 있습니다 <h1>. 이 같은 더 제목 수준해야 할 수도 <h2><h3>.


그래서 우리의 초점이 SEO에 대한 접근성이라면 개요 알고리즘과 @chharvey의 대답은 논쟁의 여지가 있습니까? h1이 사이트 제목이고 모든 페이지 제목이 h2 인 OP의 시나리오 # 1을 사용해야합니까?
swhitmore

1
정확히. 나는 사이트 제목이 아닌 페이지 제목처럼 페이지 당 하나의 <h1>을 사용한다고 말하는 Adrian Roselli에 동의합니다 . 따라서 사이트 이름, 마케팅 태그 라인 등을 제외하고 <title> 태그와 동일한 내용이됩니다. 문서 개요 알고리즘은 아직 어떤 브라우저에서도 구현되지 않았습니다. 섹션 제목에는 h2를 사용합니다. h1은 중첩 위치에 관계없이 최상위 제목입니다.
Michael McGinnis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.