web-dev-qa-db-ja.com

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

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

Webサイトでは、ホームページにリンクするロゴを作成するのが一般的です。検索エンジン、スクリーンリーダー、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を使用した異なるアプローチ。これが画像置換の「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を入力してください。

230
Andrew

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

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

h1のhrefとimgのタイトルは非常に重要です!

211
Rahul

私はほとんど上記のようにしますが、アクセシビリティの理由から、ブラウザで画像が無効になる可能性をサポートする必要があります。したがって、ページからリンクのテキストをインデントするのではなく、<span> </ code>を<a>の幅と高さ全体に絶対に配置し、z-indexを使用してリンクテキストの上に重ねて配置します。

価格は空の<span>の1つですが、<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 */  }
17
Rob Knight

アクセシビリティの理由が重要な場合は、最初のバリアントを使用します(顧客がスタイルなしの画像を見たい場合)

<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スタイルとハックを削除したことに注意してください。特定の場合にのみ有用です。

11
se_pavel

ここで少し遅れて鳴りますが、抵抗できませんでした。

あなたには疑問が半分しかありません。説明させてください:

画像置換に関する質問の前半は有効な質問です。私の意見では、ロゴはシンプルな画像です。 alt属性。そして、その配置のためのCSSで十分です。

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

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

HTML5では、ページごとに複数の見出しを使用できますが、ロゴはそのうちの1つに値しません。あいまいな緑のウィジェットである可能性のあるロゴと、一部のテキストは、ヘッダーの横にある画像にあります。これは、コンテンツを構造化する階層要素ではなく、「スタンプ」のようなものです。サイトの各ページの最初の(見出し階層に応じてより多くを使用するかどうか)は、主題を見出しにする必要があります。インデックスページの主な見出しは、「NYCのファジーグリーンウィジェットのベストソース」です。別のページの主な見出しは、「ファジーウィジェットの配送の詳細」です。別のページでは、「Bert's Fuzzy Widgets Inc.について」である可能性があります。あなたはアイデアを得る。

サイドノート:信じられないほど聞こえますが、正しいマークアップの例については、Googleが所有するWebプロパティのソースを参照しないでください。これは、それ自体の全体的な投稿です。

HTMLとその要素から最も「SEOの価値」を引き出すには、 HTML5仕様 を見て、検索エンジンの前に(HTML)セマンティクスとユーザーに対する価値に基づいてマークアップの決定を行います。あなたのSEOでより良い成功を収めるでしょう。

3
Mattypants

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>

もちろん、これはデザインでページタイトルを使用するかどうかによって異なりますが、これはこの問題に対する私の姿勢です。

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

SEOはH1タグに高い優先順位を与えるため、これはSEOの良いオプションでした。h1タグ内にはサイト名が必要です。 SEOでサイト名を検索する場合、この方法を使用すると、サイトのロゴも表示されます。

サイト名ORテキストを非表示にする場合は、負の値でtext-indentを使用してください。元

h1 a {
 text-indent: -99999px;
}
2
Vishal Gupta

<a>要素のタイトルがありません。

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

クライアントはその画像の意味を知りたいので、<a>要素にタイトルを入れることをお勧めします。 text-indentのテスト用に<h1>を設定しているため、フロントエンドユーザーはロゴにカーソルを合わせるとメインロゴの情報を取得できます。

2
30ml

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

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

1
DFA

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
Potky

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;
}
0
Sebastien Horin

新しい(ケラー)メソッドは、-9999pxメソッドよりも速度を改善することになっています。

.hide-text {
text-indent: 100%;
white-space: nowrap;
overflow: hidden;
}

ここで推奨: http://www.zeldman.com/2012/03/01/replacing-the-9999px-hack-new-image-replacement/

0
coral_sea

わかりませんが、これは使用されている形式です...

<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
Taswiz

画像が無効になっている場合は代替テキストが表示されるため、例1で十分だと思います。これは、検索エンジンがサイトについて知るのにも役立ちます。

更新:間違っていたようです。これを確認してください 記事

0
Shoban