H1 텍스트를 로고 이미지로 교체 : SEO 및 접근성을위한 최상의 방법?


240

거기에는 몇 가지 다른 기술이있는 것 같습니다. 그래서 나는 이것에 대한 "결정적인"답변을 얻고 싶었습니다 ...

웹 사이트에서는 홈페이지로 연결되는 로고를 만드는 것이 일반적입니다. CSS 및 / 또는 이미지를 비활성화 한 검색 엔진, 스크린 리더, IE 6 이상 및 브라우저에 가장 최적화하면서 동일한 작업을 수행하고 싶습니다.

예 1 : h1 태그를 사용하지 않습니다. SEO에 좋지 않은가?

<div id="logo">
    <a href="">
        <img src="logo.png" alt="Stack Overflow" />
    </a>
</div>

예 2 : 어딘가에서 찾았습니다. CSS는 약간 해키처럼 보입니다.

<h1 id="logo">
    <a href="">Stack Overflow</a>
</h1>
/* css */
#logo {
    padding: 70px 0 0 0;
    overflow: hidden;
    background-image: url("logo.png");
    background-repeat: no-repeat;
    height: 0px !important;
    height /**/:70px;
}

예 3 : 텍스트 들여 쓰기를 사용하는 동일한 HTML, 다른 접근 방식. 이것은 이미지 교체에 대한 "Phark"접근 방식입니다.

<h1 id="logo">
    <a href="">Stack Overflow</a>
</h1>
/* css */
#logo {
    background: transparent url("logo.png") no-repeat scroll 0% 0%;
    width: 250px;
    height: 70px;
    text-indent: -3333px;
    border: 0;
    margin: 0;
}

#logo a {
    display: block;
    width: 280px; /* larger than actual image? */
    height: 120px;
    text-decoration: none;
    border: 0;
}

예 4 : Leahy-Langridge-Jefferies 방법 . 이미지 및 / 또는 CSS가 꺼져있을 때 표시됩니다.

<h1 id="logo" class="logo">
    <a href="">Stack Overflow</a>
</h1>
/* css */
h1.logo {
    margin-top: 15px; /* for this particular site, set this as you like */
    position: relative; /* allows child element to be placed positioned wrt this one */
    overflow:hidden; /* don’t let content leak beyond the header - not needed as height of anchor will cover whole header */
    padding: 0; /* needed to counter the reset/default styles */
}

h1.logo a {
    position: absolute; /* defaults to top:0, left:0 and so these can be left out */
    height: 0; /* hiding text, prevent it peaking out */
    width: 100%; /* 686px; fill the parent element */
    background-position: left top;
    background-repeat: no-repeat;
}

h1#logo {
    height: 60px; /* height of replacement image */
}

h1#logo a {
    padding-top: 60px; /* height of the replacement image */
    background-image: url("logo.png"); /* the replacement image */
}

이런 종류의 물건에 가장 적합한 방법은 무엇입니까? 답변에 html과 css를 입력하십시오.


이 주제를 확인하려면 : stackoverflow.com/questions/1874895/…
meo

15
이 질문에 대답하는 Matt Cutts. youtu.be/fBLvn_WkDJ4
troynt

2
하지 않 title속성은에 있어야 <a>?
bobo

23
이 질문은 주제를 벗어난 것으로 표시해서는 안됩니다. CSS와 검색 엔진 최적화에 대해 상당히 명확하게 정의 된 질문입니다. C #이 아니기 때문에 코드가 아니라는 의미는 아닙니다.
MikeMurko

3
@troynt Matt Cutts가 때때로 오해의 소지가있는 조언을하는 것을 발견했습니다. 따라서 나는 그를 보지 않는 경향이 있습니다.
TheBlackBenzKid

답변:


221

옵션이 없습니다 :

<h1>
  <a href="http://stackoverflow.com">
    <img src="logo.png" alt="Stack Overflow" />
  </a>
</h1>

h1에 대한 href 및 img의 제목은 매우 중요합니다!


12
대체 텍스트로 이미지 주위에 h1을 감싸는 것은 h1로 감싸 인 일반 텍스트와 같은 무게 (서로)를 가지고 있습니까?
Andrew

11
그건 그렇고, 로고는 웹 사이트 콘텐츠의 일부이므로 장식에 사용되지 않으므로 로고의 CSS가 아닌 alt 속성으로 <img>를 사용하십시오.
Boris Guéry

14
이 질문에 대답하는 Matt Cutts. youtube.com/user/GoogleWebmasterHelp#p/search/0/fBLvn_WkDJ4
troynt

34
불행히도 @troynt가 남긴 주석의 링크가 손상되었습니다. 여기 내용에 대한 새로운 영구 링크가 있습니다 : youtu.be/fBLvn_WkDJ4
ahsteele

10
Matt Cutts는 기본적으로 링크 된 비디오에 무엇이 있는지 궁금해하는 모든 사람들에게 CSS로 텍스트를 숨기는 대신 img 태그의 alt 속성을 사용해야한다고 말합니다.
bjunix

17

나는 위의 것과 거의 비슷하지만 접근성 이유로 인해 브라우저에서 이미지가 비활성화 될 가능성을 지원해야합니다. 따라서 페이지 외부의 링크에서 텍스트를 들여 쓰지 않고 <span>전체 너비와 높이에 완전히 배치하고 링크 순서 위에 링크 텍스트 위에 배치 <a>하여 사용 z-index합니다.

가격은 공허 <span>하지만 가격이 중요한만큼 기꺼이 있습니다 <h1>.

<h1 id="logo">
  <a href="">Stack Overflow<span></span></a>
</h1>
#logo a {
   position:relative;
   display:block;
   width:[image width];
   height:[image height]; }

#logo a span {
   display:block;
   position:absolute;
   width:100%;
   height:100%;
   background:#ffffff url(image.png) no-repeat left top;
   z-index:100; /* Places <span> on top of <a> text */  }

1
들여 쓰기에 어떤 문제가 있습니까? 필자는 스크린 리더와 크롤러가 들여 쓰기에도 불구하고 여전히 텍스트를 선택한다고 가정했습니다.
ckarbass 2014 년

2
여기로 돌아 오는 데 시간이 오래 걸렸습니다. 들여 쓰기와 관련된 유일한 문제는 사용자 브라우저에서 이미지를 사용할 수 없지만 CSS가 켜져 있고 텍스트 나 이미지가 나타나지 않는 경우입니다. 그것은 일종의 엣지 케이스이지만 대학 웹 사이트에서 작업하면서 나를 고려하는 것이 중요합니다.
Rob Knight

흠 ...이 작동하지 못했습니다. 앵커 텍스트는 이미지 위에 계속 나타납니다.
Andrew

<nitpicker> 대신 #logo span을 사용하면 브라우저가 렌더링하는 것이 더 효율적입니다 </ nitpicker>
Chris Missal

1
경우에 따라 스팬을 #logo하기 위해 {top : 0}이 필요합니다.
Marcus

11

접근성 이유가 중요한 경우 첫 번째 변형을 사용합니다 (고객이 스타일없이 이미지를보고자 할 때)

<div id="logo">
    <a href="">
        <img src="logo.png" alt="Stack Overflow" />
    </a>
</div>

위의 HTML 코드는 올바른 구조를 가지고 있으므로 방문자에게 적합한 것으로 결정해야하기 때문에 가상의 SEO 요구 사항을 따를 필요가 없습니다.

또한 HTML 코드가 적은 변형을 사용할 수 있습니다

<h1 id="logo">
  <a href=""><span>Stack Overflow</span></a>
</h1>
/* position code, it may be absolute position or normal - depends on other parts of your site */
#logo {
  ...
}

#logo a {
   display:block;
   width: actual_image_width;
   height: actual_image_height;
   background: url(image.png) no-repeat left top;
}

/* for accessibility reasons - without styles variant*/
#logo a span {display: none}

다른 모든 CSS 스타일과 해킹은 작업에 해당하지 않으므로 제거했습니다. 특별한 경우에만 유용 할 수 있습니다.


3
display:none접근 불가 한.
KPM

가장 좋은 방법은 접근성, 유용성 및 SEO 최적화로 인해 로고를 div로 감싸는 것입니다. 대개 큰 웹 조직에서 사용됩니다. Twitter, Amazon, Mozilla는 로고에 <h1>을 사용하지 않고 페이지 제목을 더 잘 포착하기 위해 기본 제목을 사용합니다. bit.ly/1MR4fr5
Oriol

4

여기서 조금 늦었지만, 저항 할 수 없었습니다.

당신은 질문에 반쯤 빠져 있습니다. 설명하겠습니다 :

이미지 교체에 대한 귀하의 질문의 전반부는 유효한 질문이며, 제 의견은 로고의 경우 간단한 이미지라는 것입니다. 대체 속성; 포지셔닝을위한 CSS로 충분합니다

로고의 H1의 "SEO 값"에 대한 질문의 나머지 절반은 다른 유형의 콘텐츠에 사용할 요소를 결정하는 잘못된 방법입니다.

로고는 기본 제목이 아니거나 전혀 제목이 아니며 H1 요소를 사용하여 사이트의 각 페이지에 로고를 마크 업하면 순위에 좋지 않은 것 (약간)보다 더 해를 끼칩니다. 의미 적으로 제목 (H1-H6)은 콘텐츠 제목 및 부제목에만 적합합니다.

HTML5에서는 페이지 당 하나 이상의 제목이 허용되지만 로고 중 하나를 사용할 자격이 없습니다. 퍼지 녹색 위젯 일 수있는 일부 로고와 일부 텍스트가 이미지를 헤더 옆에있는 이유는 콘텐츠를 구성하는 계층 적 요소가 아니라 일종의 "스탬프"입니다. 사이트의 각 페이지에 대한 첫 번째 (자세한 내용은 제목 계층 구조에 따라 다름) H1에서 제목을 표시해야합니다. 인덱스 페이지의 주요 기본 제목은 'NYC의 퍼지 그린 위젯에 가장 적합한 소스'일 수 있습니다. 다른 페이지의 기본 제목은 '퍼지 위젯에 대한 운송 세부 사항'일 수 있습니다. 다른 페이지에서는 '버트 퍼지 위젯에 대하여'일 수 있습니다. 당신은 아이디어를 얻습니다.

참고 사항 : 들리는 것처럼 놀라운 마크 업의 예를 보려면 Google 소유 웹 속성의 출처를 보지 마십시오. 이것은 그 자체에 대한 전체 게시물입니다.

HTML과 그 요소를 최대한 활용하려면 HTML5 사양을 살펴보고 검색 엔진 이전에 사용자에게 (HTML) 의미와 가치를 기반으로 마크 업 결정을 내리면 더 나은 성공을 거둘 수 있습니다. SEO.


1
이것에 덧붙여서,이 모든 것이 사실이며, 로고는 홈페이지를 제외한 다른 페이지 (및 이상적으로는 홈페이지가 아님)의 h1이되어서는 안됩니다. 그러나 종종 홈페이지에서 h1과 가장 관련이있는 장소는 로고입니다. 영웅 배너 콘텐츠는 웹 사이트의 주제에 구체적으로 맞지 않을 수 있습니다. 사이트의 핵심 주제). 사이트에 하나의 초점 영역 (예 : 앱 사이트) 만있는 경우 영웅 영역이 h1에 대해 작동 할 수 있습니다. 그것이 작동하지 않을 때 h1에 alt로 싸인 이미지가 아무것도 아닌 것보다 낫습니다.
elmarko

3

H1 토론에 관심이 있으리라 생각합니다 . 페이지 제목이나 로고에 h1 요소를 사용할 지에 대한 토론입니다.

개인적으로 나는 당신의 첫 번째 제안, 다음 라인을 따라 갈 것입니다 :

<div id="header">
    <a href="http://example.com/"><img src="images/logo.png" id="site-logo" alt="MyCorp" /></a>
</div>

<!-- or alternatively (with css in a stylesheet ofc-->
<div id="header">
    <div id="logo" style="background: url('logo.png'); display: block; 
        float: left; width: 100px; height: 50px;">
        <a href="#" style="display: block; height: 50px; width: 100px;">
            <span style="visibility: hidden;">Homepage</span>
        </a>
    </div>
    <!-- with css in a stylesheet: -->
    <div id="logo"><a href="#"><span>Homepage</span></a></div>
</div>


<div id="body">
    <h1>About Us</h1>
    <p>MyCorp has been dealing in narcotics for over nine-thousand years...</p>
</div>

물론 이것은 디자인에서 페이지 제목을 사용하는지 여부에 달려 있지만 이것이이 문제에 대한 나의 입장입니다.


CSS 배경 이미지는 그렇지 않지만 IMG는 콘텐츠로 간주됩니다. 그렇기 때문에 사이트 전체 이미지와 해당 페이지 콘텐츠에 명시 적으로 적용되지 않는 사물에 대한 배경 이미지에 의존하는 경향이 있습니다.
Joe Phillips

@ d03boy :이 경우 로고 크기에 맞는 크기의 인라인 div를 만들고 배경을 줄 수 있습니다. 그 안에있는 범위 (가시성 : hidden;)는 "alt text"대체를 제공합니다.
Ross

6
H1 토론은 이제 연결이
alex

3
<h1>
  <a href="http://stackoverflow.com">
  Stack Overflow<img src="logo.png" alt="Stack Overflow" />
  </a>
</h1>

SEO는 H1 태그에 높은 우선 순위를 부여하고 h1 태그 내부는 사이트 이름이어야하므로 SEO에 적합한 옵션입니다. SEO에서 사이트 이름을 검색 할 때이 방법을 사용하면 사이트 로고도 표시됩니다.

사이트 이름이나 텍스트를 숨기려면 텍스트 들여 쓰기를 음수 값으로 사용하십시오. 전의

h1 a {
 text-indent: -99999px;
}

2

<a>요소 에서 제목이 누락되었습니다 .

<h1 id="logo">
  <a href="#" title="..."><span>Stack Overflow</span></a>
</h1>

<a>클라이언트가 해당 이미지의 의미가 무엇인지 알고 싶기 때문에 제목을 요소 에 넣는 것이 좋습니다 . text-indent테스트를 설정했기 때문에 <h1>해당 프론트 엔드 사용자는 로고에 마우스를 올리면 기본 로고 정보를 얻을 수 있습니다.


2

W3C는 어떻습니까?

https://www.w3.org/를 살펴보십시오 . 이미지에는가 있으며 z-index:1텍스트는 여기에 있지만 뒤에 있습니다 z-index:0.position: absolute;

원본 HTML :

<h1 class="logo">
    <a tabindex="2" accesskey="1" href="/">
        <img src="/2008/site/images/logo-w3c-mobile-lg" width="90" height="53" alt="W3C">
    </a>
    <span class="alt-logo">W3C</span>
</h1>

원본 CSS :

#w3c_mast h1 a {
    display: block;
    float: left;
    background: url(../images/logo-w3c-screen-lg) no-repeat top left;
    width: 100%;
    height: 107px;
    position: relative;
    z-index: 1;
}
.alt-logo {
    display: block;
    position: absolute;
    left: 20px;
    z-index: 0;
    background-color: #fff;
}

1

아무도 언급하지 않은 한 가지 점은 h1 속성이 모든 페이지에 고유해야하며 사이트 로고를 사용하면 사이트의 모든 페이지에서 H1을 효과적으로 복제한다는 것입니다.

최고의 SEO h1은 종종 판매 또는 미학적 가치에 최고가 아니기 때문에 각 페이지에 az index hidden h1을 사용하고 싶습니다.


메인 페이지의 로고에만 항상 H1을 사용할 수 있습니다.
Mariusz Jamro


0

모르겠지만 이것이 사용 된 형식입니다 ...

<h1>
    <span id="site-logo" title="xxx" href="#" target="_self">
        <img src="http://www.xxx.com/images/xxx.png" alt="xxx" width="xxx" height="xxx" />
        <a style="display:none">
            <strong>xxx</strong>
        </a>
    </span>
</h1>

간단하고 그것은 내가 볼 수있는 한 내 사이트를 해치지 않았습니다. 당신은 그것을 CSS 할 수는 있지만 더 빨리로드되는 것을 보지 못합니다.


0

SEO 이유 :

<div itemscope itemtype="https://schema.org/Organization">
 <p id="logo"><a href="/"><span itemprop="Brand">Your business</span> <span class="icon fa-stg"></span> - <span itemprop="makesOffer">sell staff</span></a></p>
 </div>
   <h1>Your awesome title</h1>

0

위의 솔루션을 읽은 후 CSS Grid 솔루션을 사용했습니다.

  1. h1 텍스트와 이미지를 포함하는 div를 만듭니다.
  2. 두 셀을 같은 셀에 배치하고 둘 다 상대적으로 배치하십시오.
  3. 텍스트 들여 쓰기, 공백 및 오버플로 속성을 사용하여 텍스트를 숨기려면 이전 zeldman.com 기술 을 사용하십시오 .
<div class="title-stack">
    <h1 class="title-stack__title">StackOverflow</h1>
    <a href="#" class="title-stack__logo">
        <img src="/images/stack-overflow.png" alt="Stack Overflow">
    </a>
</div>
.title-stack {
    display: grid;
}
.title-stack__title, .title-stack__logo {
    grid-area: 1/1/1/1;
    position: relative;
}
.title-stack__title {
    z-index: 0;
    text-indent: 100%;
    white-space: nowrap;
    overflow: hidden;
}

-1
<h1><a href="/" title="Some title">Name</a></h1>
h1 a{
  width: {logo width};
  height: {logo height};
  display:block;
  text-indent:-9999px;
  background:url({ logo url});
}

이와 같이 방대한 텍스트 들여 쓰기를 사용하지 않는 것이 가장 좋습니다. 성능이 크게 저하 될 수 있습니다. 자세한 설명은 여기 입니다.
Nick F

-1
<div class="logo">
    <h1><a href="index.html"><span>Insert Website Name</span></a></h1>
    <p>Insert Slogan Here</p>
</div>
#header .logo h1 {
    background: red; /* replace with image of logo */
    display:block;
    height:40px; /* image height */
    width:220px; /* image width */
}

#header .logo h1 a {
    display:block;
    height:40px; /* image height */
    width:220px; /* image width */
}

#header .logo h1 a span {
    display:none;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.