लोगो छवि के साथ H1 टेक्स्ट को बदलना: SEO और एक्सेसिबिलिटी के लिए सबसे अच्छा तरीका?


240

ऐसा लगता है कि वहाँ कुछ अलग तकनीकें हैं, इसलिए मैं इस पर "निश्चित" उत्तर पाने की उम्मीद कर रहा था ...

वेबसाइट पर, लोगो बनाने के लिए यह आम बात है कि मुखपृष्ठ से लिंक हो। मैं वही करना चाहता हूं, जबकि खोज इंजन, स्क्रीन रीडर, IE 6+, और ब्राउज़रों के लिए सबसे अच्छा अनुकूलन, जिनके पास CSS और / या छवियां अक्षम हैं।

उदाहरण एक: एक h1 टैग का उपयोग नहीं करता है। एसईओ के लिए अच्छा नहीं है, है ना?

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

उदाहरण दो: यह कहीं मिला। सीएसएस लगता है कि थोड़ा हैकी है।

<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, पाठ-इंडेंट का उपयोग करके अलग-अलग दृष्टिकोण। यह छवि बदलने के लिए "फ़ार्क" दृष्टिकोण है।

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

उदाहरण चार: लेहि-लैंगरिज-जेफरीज विधि । छवियों और / या सीएसएस बंद होने पर प्रदर्शित करता है।

<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/…
me

15
मैट कट्स ने इस सवाल का जवाब दिया। youtu.be/fBLvn_WkDJ4
troynt

2
क्या titleविशेषता में नहीं होना चाहिए <a>?
बोबो

23
इस प्रश्न को ऑफ-टॉपिक के रूप में चिह्नित नहीं किया जाना चाहिए। यह सीएसएस और खोज इंजन अनुकूलन के बारे में एक बहुत स्पष्ट रूप से परिभाषित प्रश्न है। सिर्फ इसलिए कि यह C # नहीं है इसका मतलब यह कोड नहीं है।
माइकमेर्को

3
@troynt मुझे कभी-कभी भ्रामक सलाह देने के लिए मैट कट्स मिलते हैं। जैसे कि मैं उसे नहीं देखता हूं।
TheBlackBenzKid

जवाबों:


221

आपको विकल्प याद आ रहा है:

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

href में शीर्षक और h1 से h1 में बहुत महत्वपूर्ण है!


12
एक पाठ के चारों ओर h1 को लपेटने से ऑल्ट टेक्स्ट के साथ समान वजन (seo-wise) ले जाता है, क्योंकि सादे पाठ को h1 के साथ लपेटा जाता है?
एंड्रयू

11
वैसे, यह प्रासंगिक है, एक लोगो आपकी वेबसाइट की सामग्री का हिस्सा है, इसका उपयोग सजावट के लिए नहीं किया जाता है, इसलिए <img> का उपयोग करें जिसमें आपके लोगो के लिए CSS नहीं है।
बोरिस गुएरी

14
मैट कट्स ने इस सवाल का जवाब दिया। youtube.com/user/GoogleWebmasterHelp#p/search/0/fBLvn_WkDJ4
troynt

34
दुर्भाग्य से @troynt द्वारा छोड़ी गई टिप्पणी का लिंक अब टूट गया है। यहाँ सामग्री के लिए एक नया
पर्मलिंक

10
उन सभी के लिए जो यह सोच रहे हैं कि लिंक किए गए वीडियो में क्या है: मैट कट्स मूल रूप से कहते हैं, आपको सीएसएस के साथ पाठ को छिपाने के बजाय img टैग की पूरी विशेषता का उपयोग करना चाहिए।
bjunix

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
इंडेंट करने में क्या गलत है? मेरी धारणा थी कि स्क्रीन्रेडर और क्रॉलर अभी भी इंडेंटेशन के बावजूद टेक्स्ट उठाते हैं।
carbass

2
खेद है कि मुझे यहां वापस आने में इतना समय लगा। इंडेंटिंग के साथ एकमात्र मुद्दा यह है कि उपयोगकर्ता के ब्राउज़र में छवियां अक्षम हैं, लेकिन सीएसएस चालू है, कुछ भी प्रकट नहीं होता है, पाठ या चित्र। यह एक किनारे का मामला है, लेकिन मेरे लिए विचार करना महत्वपूर्ण है, एक विश्वविद्यालय की वेबसाइट पर काम करना।
राब नाइट

हम्म ... मैं यह काम करने के लिए नहीं मिल सका। लंगर पाठ छवि के शीर्ष पर दिखाई देता रहा।
एंड्रयू

<nitpicker> इसके बजाय #logo स्पैन का उपयोग करें, यह ब्राउज़र को रेंडर करने के लिए अधिक कुशल होगा </ nitpicker>
क्रिस मिसल

1
कुछ मामलों में आपको एक स्पैन में एक {टॉप: 0} की आवश्यकता होती है।
मार्कस

11

यदि पहुंच के कारण महत्वपूर्ण हैं तो पहले संस्करण का उपयोग करें (जब ग्राहक बिना शैलियों के छवि देखना चाहता है)

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

काल्पनिक एसईओ आवश्यकताओं को पूरा करने की आवश्यकता नहीं है, क्योंकि ऊपर दिए गए 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}

कृपया ध्यान दें कि मैंने अन्य सभी सीएसएस शैलियों और हैक को हटा दिया है क्योंकि वे कार्य के अनुरूप नहीं थे। वे केवल विशेष मामलों में उपयोगी हो सकते हैं।


3
display:noneउपलब्ध नहीं है।
केपीएम

सर्वश्रेष्ठ विधि अपनी पहुंच, उपयोगिता और एसईओ अनुकूलन के कारण div के तहत लोगो को लपेट रही है, और ज्यादातर बड़े वेब संगठनों में उपयोग किया जाता है। ट्विटर, अमेज़ॅन, मोज़िला अपने लोगो के लिए <h1> का उपयोग नहीं करते हैं, लेकिन पृष्ठ मूल्य को बेहतर तरीके से कैप्चर करने के लिए मुख्य शीर्षक हैं। bit.ly/1MR4fr5
ओरोल

4

यहां थोड़ी देर में चीटिंग हुई, लेकिन विरोध नहीं किया जा सका।

आप सवाल कर रहे हैं कि आधा-दोष है। मुझे समझाने दो:

छवि प्रतिस्थापन पर आपके प्रश्न का पहला भाग एक वैध प्रश्न है, और मेरी राय यह है कि एक लोगो के लिए, एक साधारण छवि; एक पूरी विशेषता; और इसकी स्थिति के लिए सीएसएस पर्याप्त हैं।

लोगो के लिए H1 के "SEO value" पर आपके प्रश्न का उत्तरार्ध, विभिन्न प्रकार की सामग्री के लिए किन तत्वों का उपयोग करना है, यह तय करना गलत दृष्टिकोण है।

एक लोगो एक प्राथमिक शीर्षक, या यहां तक ​​कि एक शीर्षक नहीं है, और आपकी साइट के प्रत्येक पृष्ठ पर लोगो को चिह्नित करने के लिए एच 1 तत्व का उपयोग आपकी रैंकिंग के लिए अच्छे से अधिक नुकसान (थोड़ा) करेगा। शब्दार्थ, शीर्षकों (H1 - H6) के लिए उपयुक्त हैं, ठीक है, बस: शीर्षकों और सामग्री के लिए सबहेडिंग।

HTML5 में, प्रति पृष्ठ एक से अधिक शीर्षक की अनुमति है, लेकिन एक लोगो उनमें से एक के योग्य नहीं है। आपका लोगो, जो एक अस्पष्ट हरे रंग का विजेट हो सकता है और कुछ पाठ हेडर के किनारे पर एक कारण के लिए एक छवि में है - यह एक "स्टैम्प" की तरह है, न कि आपकी सामग्री की संरचना करने के लिए एक पदानुक्रमित तत्व। आपकी साइट के प्रत्येक पृष्ठ का पहला (चाहे आप अधिक उपयोग करें अपनी हेडिंग पदानुक्रम पर निर्भर करता है) H1 को अपनी विषय वस्तु को शीर्षक देना चाहिए। आपके अनुक्रमणिका पृष्ठ का मुख्य प्राथमिक शीर्षक 'NYC में फ़ज़ी ग्रीन विजेट के लिए सर्वश्रेष्ठ स्रोत' हो सकता है। किसी अन्य पृष्ठ पर प्राथमिक शीर्षक 'शिपिंग विवरण हमारी फ़ज़ी विजेट्स' हो सकते हैं। एक अन्य पृष्ठ पर, यह 'बर्ट फ़र्ज़ी विजेट इंक के बारे में' हो सकता है। तुम्हें नया तरीका मिल गया है।

ध्यान दें: जैसा कि अविश्वसनीय लगता है, सही मार्कअप के उदाहरणों के लिए Google के स्वामित्व वाली वेब संपत्तियों के स्रोत को न देखें। यह अपने आप में एक संपूर्ण पोस्ट है।

HTML और उसके तत्वों के लिए सबसे "SEO value" प्राप्त करने के लिए, HTML5 स्पेक्स पर एक नज़र डालें , और सर्च इंजन से पहले उपयोगकर्ताओं के लिए (HTML) शब्दार्थ और मूल्य के आधार पर मार्कअप निर्णय लें, और आपको अपने साथ बेहतर सफलता मिलेगी एसईओ।


1
इसे जोड़ना, कि यह सब सच है, और लोगो को मुखपृष्ठ के अलावा किसी भी अन्य पृष्ठ पर h1 नहीं होना चाहिए (और आदर्श रूप से मुखपृष्ठ पर नहीं)। हालांकि, अक्सर एक मुखपृष्ठ पर h1 के लिए सबसे अधिक प्रासंगिक स्थान लोगो होगा, क्योंकि हीरो बैनर सामग्री वेबसाइट के विषय के लिए पर्याप्त विशिष्ट नहीं हो सकती है (अर्थात यह वर्तमान सेवा या उत्पाद से संबंधित हो सकती है जिसे इसके बजाय धक्का दिया जा रहा है। साइट का मुख्य विषय)। यदि साइट में केवल फोकस का एक क्षेत्र है (जैसे ऐप के लिए साइट), तो हीरो क्षेत्र h1 के लिए काम कर सकता है। जब यह h1 में पूरी तरह से लिपटे हुए छवि के साथ काम नहीं करता है तो कुछ भी नहीं से बेहतर है।
elmarko

3

मुझे लगता है कि आप एच 1 डिबेट में दिलचस्पी लेंगे । यह इस बारे में बहस है कि पृष्ठ के शीर्षक के लिए 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
एच 1 डिबेट अब एक मृत कड़ी है
एलेक्स

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

यह SEO के लिए अच्छा विकल्प था क्योंकि SEO H1 टैग को उच्च प्राथमिकता देता है, h1 टैग के अंदर आपकी साइट का नाम होना चाहिए। यदि आप एसईओ में साइट का नाम खोजते हैं तो इस पद्धति का उपयोग करके यह आपके साइट लोगो को भी दिखाएगा।

आप साइट का नाम या पाठ छिपाना चाहते हैं कृपया नकारात्मक मूल्य में पाठ-इंडेंट का उपयोग करें। भूतपूर्व

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

मूल सीएसएस:

#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 विशेषता प्रत्येक पृष्ठ के लिए विशिष्ट होनी चाहिए और साइट लोगो का उपयोग करके साइट के प्रत्येक पृष्ठ पर एच 1 को प्रभावी रूप से दोहराया जाएगा।

मैं प्रत्येक पृष्ठ के लिए az इंडेक्स हिडन h1 का उपयोग करना पसंद करता हूं क्योंकि सबसे अच्छा SEO h1 अक्सर बिक्री या सौंदर्य मूल्य के लिए सबसे अच्छा नहीं होता है।


आप हमेशा मुख्य पृष्ठ पर ही लोगो के लिए H1 का उपयोग कर सकते हैं।
मारियस जमरो


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>

सरल और इसने मेरी साइट को कोई नुकसान नहीं पहुँचाया है जहाँ तक मैं देख सकता हूँ। आप इसे सीएसएस कर सकते हैं, लेकिन मैं इसे किसी भी तेजी से लोड नहीं देखता हूं।


0

एसईओ कारण के लिए:

<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

उपरोक्त समाधानों के माध्यम से पढ़ने के बाद, मैंने सीएसएस ग्रिड समाधान का उपयोग किया।

  1. एक div बनाएँ जिसमें h1 टेक्स्ट और इमेज हो।
  2. दोनों वस्तुओं को एक ही सेल में रखें और दोनों को अपेक्षाकृत स्थिति में रखें।
  3. टेक्स्ट-इंडेंट, व्हाइट-स्पेस और अतिप्रवाह गुणों का उपयोग करके टेक्स्ट को छिपाने के लिए पुरानी zeldman.com तकनीक का उपयोग करें।
<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});
}

यह इस तरह बड़े पैमाने पर पाठ इंडेंट का उपयोग नहीं करने के लिए सबसे अच्छा है, क्योंकि यह संभावित रूप से बड़े प्रदर्शन हिट का कारण बनता है। विस्तृत विवरण यहाँ
निक एफ

-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;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.