Martin Zahuta
Martin Zahuta

Reputation: 281

What's the correct way to hide the <h1> tag and not be banned from Google?

The website I am working on uses an image defined in CSS as the main logo. The HTML code looks like this:

<h1>example.com | The best something ever</h1>

I would like to display just the image defined in CSS and pass the information from the H1 tag to the search enginges only.

What's the correct way to do this? Google is very strict about this, I know that display:none is wrong, what about visibility: hidden?

Upvotes: 27

Views: 84510

Answers (11)

humhann
humhann

Reputation: 126

Some frameworks (e.g. Bootstrap, TailwindCSS) will use visually-hidden or sr-only class or mixing to have element available to screen readers only.

Example:

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}

Upvotes: -1

user282835
user282835

Reputation:

I think that visibility: hidden; would work fine. Have you tried it yet?

Upvotes: 0

talkingD0G
talkingD0G

Reputation: 413

You're not going to get good SEO results if you, first hide the <h1>, and second use generic phrases inside the <h1>.

Don't just use the <h1> for sizing, you can use classes to style.

<h1> tags should contain keyword rich information such as:

Automotive Repair

Automotive repair being the keyword that relates to the particular page I'm theoretically working on.

Hope that makes sense.

Upvotes: 3

user3633421
user3633421

Reputation: 25

<h1 style="font-size: 2px; margin: 0px;">Something goes here</h1>

Works like a charm.... ;-) The screen readers will interpret it and won't affect your SEO.

Upvotes: 0

Motaz Homsi
Motaz Homsi

Reputation: 739

A full article in this matter is explained here https://www.paciellogroup.com/blog/2012/05/html5-accessibility-chops-hidden-and-aria-hidden/ So , when i work i use this code to support screen reader as well as hide some h1's and use pictures instead of it like (logo)

.offscreen{
  position: absolute;
  clip: rect(1px 1px 1px 1px); /* for Internet Explorer */
  clip: rect(1px, 1px, 1px, 1px);
  padding: 0;
  border: 0;
  height: 1px;
  width: 1px;
  overflow: hidden;
}

to find more follow the link

Upvotes: 0

hpique
hpique

Reputation: 120344

You should be fine with visibility: hidden.

That said, if your image is part of the content (and I would dare to say that a company logo is content, not presentation), and you care about accessible html, you should consider changing your code to include the image as a img element with title and alternate text, instead of a css background-image.

Additionally, if you hope to attract search engines to the keywords inside the <h1> element, you might want to include those words more than once in the page. The page title is a much more relevant place than the h1 element, for example.

Upvotes: 26

Chikiro
Chikiro

Reputation: 264

Resizing the block would work:

h1 {
    overflow: hidden;
    width: 1px;
    height: 1px;
}

Upvotes: -1

Ms2ger
Ms2ger

Reputation: 15993

The easiest, foolproof, best for SEO solution would be

<h1><img src=logo.png alt="Something.com | The best something ever"></h1>

Upvotes: 26

Guffa
Guffa

Reputation: 700562

Does your web site consist of just one single page?

Otherwise you should put the headline of each page in the h1 tag, not the tagline of the site. Repeating the same headline on every page would make it pretty much useless.

Upvotes: 0

me_and
me_and

Reputation: 15634

The "correct" way to do this is to have the text in the title bar or in your page's meta text.

Upvotes: 3

cdutson
cdutson

Reputation: 738

set the image as the background of your h1 (set the width/height so it fits) then set your text-indent to something crazy like -9999px. That way when css is disabled (such as being crawled) the bot will see the text in the header instead of the background.

example:

CSS

#myHeader {
width:200px;
height:50px;
background: url('lcoation/of/the/image.jpg') top left no-repeat;
text-indent:-9999px;
}

HTML

<body>
...
<h1 id='myHeader'>HELLO WORLD</h1>
...
</body>

Upvotes: 2

Related Questions