H1テキストをロゴ画像で置き換える:SEOとアクセシビリティのための最良の方法?


240

そこにはいくつかの異なるテクニックがあるようですので、私はこれについて「決定的な」答えを得ることを望んでいました...

ウェブサイトでは、ホームページにリンクするロゴを作成するのが一般的です。同じことをしたいが、検索エンジン、スクリーンリーダー、IE 6 +、CSSや画像を無効にしているブラウザ向けに最適化します。

例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、text-indentを使用した異なるアプローチ。これは、イメージの置き換えに対する「ファーク」アプローチです。

<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
マットカッツがこの質問に答えました。youtu.be/fBLvn_WkDJ4
troynt

2
されていないtitle属性がでなければなりませんか<a>
bobo 2012年

23
この質問はトピック外としてマークされるべきではありません。CSSと検索エンジンの最適化についてかなり明確に定義された質問です。C#ではないからといって、コードではないという意味ではありません。
MikeMurko 2012

3
@troynt私はマットカッツが時々誤解を招くアドバイスをするのを見つけます。そのため、私は彼を見ない傾向があります。
TheBlackBenzKid

回答:


221

オプションがありません:

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

h1へのhrefおよびimgのタイトルは非常に重要です。


12
altテキストで画像の周りにh1をラップすると、h1でラップされたプレーンテキストと同じ重み(順序)になりますか?
Andrew

11
ちなみに、関連性があります。ロゴはウェブサイトのコンテンツの一部であり、装飾には使用されないため、ロゴにCSSではなく、alt属性を指定して<img>を使用します。
BorisGuéry10年

14
マットカッツがこの質問に答えました。youtube.com/user/GoogleWebmasterHelp#p/search/0/fBLvn_WkDJ4
troynt

34
残念ながら、@ troyntが残したコメント内のリンクは現在壊れています。これがコンテンツへの新しいパーマリンクです:youtu.be/fBLvn_WkDJ4
ahsteele

10
リンクされたビデオに何があるのか​​と思っているすべての人のために:Matt Cuttsは基本的に言うと、CSSでテキストを隠す代わりにimgタグのalt属性を使用するべきです。
bjunix 2016年

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 2009年

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 2014年

アクセシビリティ、使いやすさ、SEO最適化のために、divの下でロゴをラップするのが最善の方法であり、主に大規模なWeb組織全体で使用されます。Twitter、Amazon、Mozillaはロゴに<h1>を使用していませんが、ページの価値をより適切に把握するために主要な見出しを使用しています。bit.ly/1MR4fr5
Oriol

4

ここで少し遅れて鳴くが、抵抗することができなかった。

あなたは質問に半分欠陥があります。説明させてください:

画像の置き換えに関するあなたの質問の前半は有効な質問です。私の意見では、ロゴは単純な画像です。alt属性。とその位置付けのためのCSSは十分です。

ロゴのH1の「SEO値」についての質問の後半は、さまざまなタイプのコンテンツに使用する要素を決定するための誤ったアプローチです。

ロゴは主要な見出しではなく、見出しでもありません。H1要素を使用してサイトの各ページでロゴをマークアップすると、ランキングよりも害が大きくなります。意味的には、見出し(H1〜H6)は、コンテンツの見出しと小見出しに適しています。

HTML5では、ページごとに複数の見出しを使用できますが、ロゴはそれらの1つに値するものではありません。ロゴは、あいまいな緑色のウィジェットである場合があり、一部のテキストは、理由のためにヘッダーの横にある画像内にあります。これは、「スタンプ」の一種であり、コンテンツを構造化する階層要素ではありません。最初の(使用するかどうかは見出しの階層に依存します)サイトの各ページのH1は、その主題を見出します。インデックスページの主な見出しは、「ニューヨークのファジーグリーンウィジェットのベストソース」でしょう。別のページの主要な見出しは、「ファジーウィジェットの詳細を出荷」です。別のページでは、「Bert's Fuzzy Widgets Inc.について」のようです。あなたはアイデアを得ます。

補足:信じられないほど信じられないほど、正しいマークアップの例については、Googleが所有するWebプロパティのソースを参照しないでください。これはそれ自体への全体のポストです。

HTMLとその要素から「SEO値」を最大限に引き出すには、HTML5仕様を確認し、検索エンジンの前に(HTML)のセマンティクスと値に基づいてマークアップを決定してください。 SEO。


1
これに加えて、これはすべて真実であり、ロゴはホームページを除いた他のページのh1であってはなりません(&理想的にはホームページではありません)。ただし、ヒーローバナーのコンテンツはウェブサイトのトピックに十分に限定されない可能性があるため、ホームページではh1に最も関連する場所がロゴになります(つまり、現在のサービスや製品ではなく、プッシュされている現在のサービスまたは製品に関連している場合があります)サイトの中核トピック)。サイトのフォーカスエリアが1つだけの場合(アプリのサイトなど)、ヒーローエリアは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>

もちろん、これはあなたのデザインがページタイトルを使用しているかどうかに依存しますが、これはこの問題に対する私のスタンスです。


IMGはコンテンツと見なされますが、CSSの背景画像はそうではありません。そのため、サイト全体の画像や、そのページのコンテンツには明示されていないそのような性質の背景画像に傾く傾向があります。
ジョーフィリップス

@ d03boy:その場合は、ロゴサイズの正しいサイズのインラインdivを作成し、その背景を指定できます。その内部のスパン(可視性:非表示;)は、「代替テキスト」の置換を提供します。
ロス

6
H1の討論は現在、リンク
切れです

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

SEOはH1タグに高い優先順位を与えるので、これはSEOにとって適切なオプションでした。h1タグ内にはサイト名を含める必要があります。この方法を使用して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:0position: 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

誰も触れなかった1つの点は、h1属性はすべてのページに固有である必要があり、サイトのロゴを使用すると、サイトのすべてのページでH1が効果的に複製されるという事実です。

最高のSEO h1は多くの場合、販売や美的価値に最適ではないため、各ページにzインデックス非表示h1を使用するのが好きです。


メインページのロゴには常にH1を使用できます。
Mariusz Jamro 2016年


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グリッドソリューションを使用しました。

  1. h1テキストと画像を含むdivを作成します。
  2. 2つのアイテムを同じセルに配置し、両方を相対的に配置します。
  3. 古いzeldman.comの手法を使用して、text-indent、white-space、overflowプロパティを使用してテキストを非表示にします。
<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.