Zastąpienie tekstu H1 obrazem logo: najlepsza metoda na SEO i dostępność?

Wydaje się, że istnieje kilka różnych technik, więc miałem nadzieję uzyskać "ostateczną" odpowiedź na to pytanie...

Na stronie internetowej powszechną praktyką jest tworzenie logo, które łączy się ze stroną główną. Chcę zrobić to samo, jednocześnie najlepiej optymalizując dla wyszukiwarek, czytników ekranu, IE 6+ i przeglądarek, które mają wyłączone CSS i / lub obrazy.

Przykład pierwszy: nie używa znacznika h1. Nie tak dobre dla SEO, prawda?

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

Przykład drugi: znalazłem to gdzieś. CSS wydaje się trochę chwiejny.

<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;
}

Przykład trzeci: ten sam HTML, inne podejście przy użyciu text-indent. Jest to podejście "Phark" do wymiany obrazu.

<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;
}

Przykład czwarty: metoda Leahy-Langridge-Jefferies . Wyświetla, gdy obrazy i / lub css są wyłączone.

<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 */
}

Jaka metoda jest najlepsza do tego typu rzeczy? Proszę podać html i css w odpowiedzi.

Author: animuson, 2009-03-20

14 answers

Brakuje ci opcji:

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

Tytuł w href I img do h1 jest bardzo, bardzo ważny!

 200
Author: Rahul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-26 13:47:18

Robię to głównie jak ten powyżej, ale ze względów dostępności, muszę wspierać możliwość wyłączania obrazów w przeglądarce. Więc zamiast wciąć tekst z linku na stronie, pokrywam go absolutnie pozycjonując <span> do pełnej szerokości i wysokości <a> oraz za pomocą z-index, aby umieścić go nad tekstem linku w kolejności układania.

Cena jest jedna pusta <span>, ale jestem gotów ją mieć za coś tak ważnego jak <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
Author: Rob Knight,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-17 22:08:13

Jeśli ważne są względy dostępności, użyj pierwszego wariantu (gdy klient chce zobaczyć obraz bez stylów)

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

Nie ma potrzeby dostosowywania wyimaginowanych wymagań SEO, ponieważ powyższy kod HTML ma poprawną strukturę i tylko Ty powinieneś zdecydować, czy jest to odpowiednie dla Ciebie odwiedzających.

Możesz również użyć wariantu z mniejszym kodem 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}

Proszę zauważyć, że usunąłem wszystkie inne style CSS i hacki, ponieważ nie odpowiadały one zadaniu. Oni może być użyteczny tylko w szczególnych przypadkach.

 11
Author: se_pavel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-02 10:19:10

Myślę, że zainteresuje cię dyskusja H1 . To debata o tym, czy użyć elementu h1 do tytułu strony, czy do logo.

Osobiście wybrałbym twoją pierwszą sugestię, coś w tym stylu:

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

Oczywiście zależy to od tego, czy twój projekt używa tytułów stron, ale takie jest moje stanowisko w tej kwestii.

 3
Author: Ross,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-21 20:31:54

Przegapiłeś tytuł w elemencie <a>.

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

Proponuję umieścić title w elemencie <a>, ponieważ klient chciałby wiedzieć, jakie jest znaczenie tego obrazu. Ponieważ Ustawiłeś text-indent do testu <h1>, aby użytkownik mógł uzyskać informacje o głównym logo, gdy unosi się na logo.

 2
Author: 30ml,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-11 18:36:56

Dzwonienie trochę późno tutaj, ale nie mógł się oprzeć.

Twoje pytanie jest w połowie wadliwe. Pozwól mi wyjaśnić:

Pierwsza połowa twojego pytania, dotyczącego wymiany obrazu, jest słuszna i moim zdaniem dla logo wystarczy prosty obraz, atrybut alt i CSS do jego pozycjonowania.

Druga połowa twojego pytania, na "wartość SEO" H1 dla logo jest złe podejście do decydowania o tym, które elementy do wykorzystania dla różnych typów treść.

Logo nie jest głównym nagłówkiem, ani nawet nagłówkiem, a użycie elementu H1 do oznaczania logo na każdej stronie witryny zrobi (nieco) więcej szkody niż pożytku dla Twoich rankingów. Semantycznie, nagłówki (H1-H6 ) są odpowiednie dla, cóż, tylko, że: nagłówki i podtytuły dla treści.

W HTML5 dozwolone jest więcej niż jeden nagłówek na stronę, ale logo nie zasługuje na jedno z nich. Twoje logo, które może być rozmytym zielonym widżetem, a część tekstu znajduje się w obrazie od strony nagłówka z jakiegoś powodu - jest to rodzaj "znaczka", a nie hierarchiczny element do struktury treści. Pierwszy (czy używasz więcej zależy od hierarchii nagłówków) H1 każdej strony witryny powinien nagłówek jej tematu. Głównym nagłówkiem Twojej strony indeksu może być "najlepsze źródło rozmytych zielonych widżetów w Nowym Jorku". Głównym nagłówkiem na innej stronie może być "szczegóły wysyłki dla naszych rozmytych widżetów". Na innej stronie może być 'o Bert' s Fuzzy Widgets Inc.'. Rozumiesz.

Uwaga na marginesie: choć brzmi to niewiarygodnie, nie patrz na źródło właściwości internetowych należących do Google, aby znaleźć przykłady poprawnych znaczników. To jest cały post dla siebie.

Aby uzyskać jak najwięcej "wartości SEO" HTML i jego elementów, spójrz na specyfikację HTML5 i podejmuj decyzje dotyczące znaczników w oparciu o semantykę (HTML) i wartość dla użytkowników przed wyszukiwarkami, a będziesz miał lepszy sukces z SEO.

 2
Author: Mattypants,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-25 05:25:35
<h1>
  <a href="http://stackoverflow.com">
  Stack Overflow<img src="logo.png" alt="Stack Overflow" />
  </a>
</h1>

To była dobra opcja dla SEO, ponieważ SEO nadaje tagowi H1 wysoki priorytet, wewnątrz tagu h1 powinna znajdować się nazwa twojej witryny. Korzystając z tej metody, jeśli wyszukasz nazwę witryny w wyszukiwarce SEO, wyświetli również logo Twojej witryny.

Aby ukryć nazwę strony lub tekst, użyj text-indent w wartości ujemnej. ex

h1 a {
 text-indent: -99999px;
}
 2
Author: Vishal Gupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-10 10:18:23

Jednym z punktów, którego nikt nie poruszył, jest fakt, że atrybut h1 powinien być specyficzny dla każdej strony, a użycie logo witryny skutecznie powieli H1 na każdej stronie witryny.

Lubię używać indeksu z ukrytego h1 dla każdej strony, ponieważ najlepsze SEO h1 często nie jest najlepsze dla sprzedaży lub wartości estetycznej.

 1
Author: DFA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-09 07:40:03

Myślę, że przykład pierwszy jest więcej niż wystarczający, ponieważ tekst alt będzie wyświetlany, jeśli obrazy są wyłączone. Pomoże to również wyszukiwarkom dowiedzieć się o Twojej witrynie.

Update: wygląda na to, że się myliłem. Sprawdź ten Artykuł .

 0
Author: Shoban,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-20 05:05:18

Nie wiem, ale jest to format, który został użyty...

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

Proste i nie zrobił mojej stronie żadnej szkody, o ile widzę. Można css to, ale nie widzę, że ładuje się szybciej.

 0
Author: Taswiz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-19 16:51:01

Nowa (Keller) metoda ma poprawić prędkość w stosunku do metody-9999px:

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

Polecane tutaj: http://www.zeldman.com/2012/03/01/replacing-the-9999px-hack-new-image-replacement/

 0
Author: coral_sea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-29 20:58:24
<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});
}
 -1
Author: Rodrigo Reis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-17 22:07:20
<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;
}
 -1
Author: Daniel Boundy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-17 22:10:12

Z powodu 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>
 -1
Author: Potky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-22 20:48:34