Замена текста H1 логотипом: лучший способ для SEO и доступность? - PullRequest
229 голосов
/ 20 марта 2009

Кажется, что есть несколько различных техник, поэтому я надеялся получить "окончательный" ответ на этот вопрос ...

На веб-сайте принято создавать логотип, который ссылается на домашнюю страницу. Я хочу сделать то же самое, при этом оптимизируя работу поисковых систем, программ чтения с экрана, IE 6+ и браузеров, которые отключили CSS и / или изображения.

Пример первый: Не использует тег h1. Не так хорошо для SEO, верно?

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

Пример второй: Нашел где-то это. 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;
}

Пример третий: Тот же 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;
}

Пример четвертый: Метод Лихи-Ленгриджа-Джеффериса . Отображается, когда изображения и / или 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 в своем ответе.

Ответы [ 15 ]

210 голосов
/ 21 марта 2009

Вам не хватает опции:

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

заголовок в href и img в h1 очень, очень важен!

17 голосов
/ 20 марта 2009

Я делаю это в основном так, как описано выше, но из соображений доступности мне нужно поддерживать возможность отключения изображений в браузере. Таким образом, вместо отступа текста от ссылки со страницы, я закрываю его, помещая <code><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 */  }
11 голосов
/ 21 марта 2009

Если важны причины доступности, используйте первый вариант (когда клиент хочет видеть изображение без стилей)

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

Нет необходимости соответствовать мнимым требованиям SEO, поскольку приведенный выше HTML-код имеет правильную структуру, и только вы должны решить, подходит ли это для ваших посетителей

Также вы можете использовать вариант с меньшим количеством 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 голосов
/ 25 сентября 2016

Звонит немного позже, но не удержался.

Твой вопрос наполовину несовершенен. Позвольте мне объяснить:

Первая половина вашего вопроса о замене изображения - это правильный вопрос, и я считаю, что для логотипа - простое изображение; атрибут alt; и CSS для его позиционирования достаточно.

Вторая половина вашего вопроса о «значении SEO» H1 для логотипа - это неправильный подход к решению, какие элементы использовать для различных типов контента.

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

В HTML5 допускается более одного заголовка на страницу, но логотип не заслуживает одного из них. Ваш логотип, который может быть нечетким зеленым виджетом и некоторым текстом, находится на изображении сбоку от заголовка по причине - это своего рода «штамп», а не иерархический элемент для структурирования вашего контента. Первый (то, используете ли вы больше, зависит от вашей иерархии заголовков) H1 каждой страницы вашего сайта должен озаглавить его предмет. Основным основным заголовком вашей индексной страницы может быть «Лучший источник нечетких зеленых виджетов в Нью-Йорке». Основной заголовок на другой странице может быть «Сведения о доставке наших нечетких виджетов». На другой странице это может быть «О компании Bert's Fuzzy Widgets Inc.». Вы поняли.

Примечание: как бы невероятно это не звучало, не смотрите на источник веб-ресурсов, принадлежащих Google, чтобы найти примеры правильной разметки. Это целый пост сам по себе.

Чтобы получить наибольшую "ценность SEO" из HTML и его элементов, взгляните на спецификации HTML5 и примите решения по разметке на основе семантики (HTML) и значения для пользователей перед поисковыми системами, и вы добьетесь большего успеха с вашим SEO.

3 голосов
/ 21 марта 2009

Думаю, вас заинтересует дискуссия 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>

Конечно, это зависит от того, использует ли ваш дизайн заголовки страниц, но это моя позиция по этому вопросу.

2 голосов
/ 10 февраля 2017
<h1>
  <a href="http://stackoverflow.com">
  Stack Overflow<img src="logo.png" alt="Stack Overflow" />
  </a>
</h1>

Это был хороший вариант для SEO, потому что SEO отдает тегу H1 высокий приоритет, внутри тега h1 должно быть имя вашего сайта. Используя этот метод, если вы будете искать имя сайта в SEO, он также покажет логотип вашего сайта.

Вы хотите скрыть имя сайта ИЛИ текст, пожалуйста, используйте текстовый отступ в отрицательном значении. ех

h1 a {
 text-indent: -99999px;
}
2 голосов
/ 04 марта 2010

Вы пропустили заголовок в элементе <a>.

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

Я предлагаю поместить заголовок в элемент <a>, потому что клиент хотел бы знать, что означает это изображение. Поскольку вы установили text-indent для теста <h1>, чтобы пользователь переднего плана мог получать информацию об основном логотипе, пока он зависает над логотипом.

1 голос
/ 09 апреля 2013

Один момент, который никто не затронул, это тот факт, что атрибут h1 должен быть специфичным для каждой страницы, а использование логотипа сайта будет эффективно дублировать H1 на каждой странице сайта.

Мне нравится использовать z-индекс, скрытый h1 для каждой страницы, так как лучший SEO-h1 часто не самый лучший для продаж или эстетической ценности.

0 голосов
/ 02 мая 2019

Как работает 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;
}
0 голосов
/ 22 октября 2016

По причине 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>
...