Alt text β€” the alternative text attribute on HTML image elements β€” is one of the most consistently misunderstood elements in SEO. Many site owners either leave it blank, fill it with keyword repetitions, or write vague descriptions that serve neither users nor search engines. Getting alt text right is a straightforward win that improves accessibility, helps images rank in Google Image Search, and contributes to overall on-page keyword signals.

What Alt Text Does

Alt text serves two primary purposes that work together rather than separately.

Accessibility. Screen readers β€” software used by visually impaired users to navigate the web β€” read alt text aloud when they encounter an image. For users who cannot see images, alt text is the only way to understand what an image contains. This is not an optional consideration β€” in many jurisdictions, web accessibility is legally required for certain types of sites, and even where it is not legally mandated, inclusive design is a professional and ethical standard.

Search engine understanding. Search engines cannot see images the way humans can β€” they rely on surrounding text, file names, and alt text to understand what an image depicts. Well-written alt text helps Google index your images in Image Search, contributes keyword relevance signals to the page's overall context, and as we covered in our guide to image SEO, descriptive filenames and alt text together determine how well an image ranks.

HTML Document AreaOptimal Density & OccurrenceSearch Intent ValueTechnical Rule
<title> Tag1x (Primary keyword near front)Maximum relevance weightingKeep strictly under 60 characters
<h1> Main Header1x per URL (Exact or close variant)High structural signalMust reflect primary user query intent
First 100 Words1x natural placementHigh early-indexing weightDirectly answers extractable user question
Subheadings <h2> / <h3>2–3x semantic synonymsTopical entity expansionAvoid exact duplicate repetitions
Body Text Density1.0% – 2.2% natural distributionTopical coverage signalStop when text sounds forced or unnatural

How to Write Good Alt Text

Be specific and descriptive. Alt text should describe exactly what the image shows. "Photo of a website" is useless. "Broken link checker tool showing a list of 404 errors found on a sample website" is excellent. The test: if a sighted person read your alt text aloud, would a blind person have an accurate mental picture of the image?

Include your target keyword naturally where it genuinely describes the image. If your page is about broken link building and an image shows a broken link checker tool in action, alt text that includes "broken link checker" is natural and appropriate. Do not force keywords into alt text where they do not genuinely describe the image β€” "broken link checker SEO tool 2026 find dead links" is keyword stuffing, not description.

Keep it concise. 125 characters or fewer is the recommended maximum. Longer descriptions may be truncated by screen readers. If an image genuinely requires a longer description β€” a complex chart or infographic β€” provide a brief alt text and a longer description in the surrounding text or a linked figure caption.

Do not start with "image of" or "picture of". Screen readers already announce that they are describing an image. Starting alt text with "image of" is redundant and wastes your character allowance.

When to Use Empty Alt Text

Decorative images β€” images that add visual design but contain no informational content β€” should have empty alt text: alt="". This explicitly tells screen readers to skip the image, avoiding noise for visually impaired users. Examples of decorative images include background patterns, decorative borders, and purely aesthetic flourishes.

Do not omit the alt attribute entirely for decorative images β€” a missing alt attribute is treated as missing information, while alt="" explicitly signals that the image is decorative.

Alt Text for Linked Images

When an image functions as a link (clickable logo, button image), the alt text should describe the link destination rather than the image itself. A company logo that links to the homepage should have alt text like "[Company Name] homepage" rather than "[Company Name] logo".

Auditing Your Alt Text

Use the free SEOLinkScan Site Scanner to crawl your site and identify images with missing or empty alt text. Combine this with a review of your most important pages β€” particularly product pages, service pages, and your highest-traffic articles β€” to ensure all significant images have meaningful alt text that contributes to the page's keyword context. As we covered in our guide to on-page SEO, alt text is part of the complete on-page optimisation process that should be applied to every published page.

Technical Diagnostic Checklist: Write Effective Alt Text for Images
  • ✓
    Target Exact Intent in Titles: Align your `` tag and primary `<h1>` with the explicit problem the searcher is attempting to solve.</div></li><li><span class="checklist-icon">✓</span><div><strong>Check Natural Keyword Density:</strong> Run <a href="/keyword-density">Keyword Density Checker</a> to confirm keyword density remains under 2.5% without keyword stuffing.</div></li><li><span class="checklist-icon">✓</span><div><strong>Answer the Query in the First 100 Words:</strong> Provide an authoritative, direct 40-word extractable answer right below the introductory heading.</div></li><li><span class="checklist-icon">✓</span><div><strong>Incorporate Semantic LSI Entities:</strong> Expand subheadings to cover closely related topical entities, questions, and technical comparisons.</div></li></ul></div> <h2>Strategic Action Plan: Mastering Write Effective Alt Text for Images</h2> <p>Effective alt text is specific, concise, naturally keyword-inclusive where the image genuinely depicts the keyword topic, and empty for purely decorative images. It serves accessibility and SEO simultaneously. Audit your existing images with the free <a href="/scan" class="text-indigo-600 font-medium hover:underline">SEOLinkScan Site Scanner</a> and write meaningful alt text for every informational image on your most important pages.</p> <p><em>Missed the previous article? Read: <a href="/blog/pagination-seo-guide">Pagination SEO: How to Handle Multi-Page Content Correctly</a></em></p> <div class="related-guides"><h3 class="related-guides-title"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"></path><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"></path></svg>Related Technical SEO Guides</h3><ul class="related-guides-list"><li><a href="/blog/keyword-density-how-much-is-too-much">Keyword Density β€” How Much Is Too Much?</a><span class="related-guides-desc">Keyword density is widely misunderstood. Learn what it actually means for SEO in 2025, what the right balance looks like, and how to check your own content.</span></li><li><a href="/blog/how-to-optimise-your-title-tags-for-seo">How to Optimise Your Title Tags for SEO</a><span class="related-guides-desc">Learn how to optimise your title tags for SEO with best practices to improve rankings and user engagement.</span></li><li><a href="/blog/meta-descriptions-seo">Meta Descriptions: Do They Still Matter for SEO?</a><span class="related-guides-desc">Meta descriptions do not directly affect rankings but they dramatically impact click-through rates. Learn how to write them effectively for maximum SEO benefit.</span></li></ul></div> </div> <!-- In-Article SEO Audit Callout --> <div class="article-audit-card"> <div class="article-audit-badge">πŸ’Ό Agency SEO Solution</div> <h3 class="article-audit-title">Need a Comprehensive Technical SEO Audit for Your Domain?</h3> <p class="article-audit-desc">Our team analyzes crawl depth, link equity leaks, Core Web Vitals bottlenecks, and manual indexation blockers to help you scale organic revenue.</p> <a href="/contact?service=audit" class="article-audit-btn"> <span>Request Technical Audit</span> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg> </a> </div> <!-- Prev / Next --> <div class="article-nav"> <a href="/blog/pagination-seo-guide" class="nav-card prev"> <div class="nav-label">← Previous</div> <div class="nav-title">Pagination SEO: How to Handle Multi-Page Content Correctly</div> </a> <a href="/blog/website-navigation-seo" class="nav-card next"> <div class="nav-label">Next β†’</div> <div class="nav-title">How to Optimise Your Website Navigation for SEO</div> </a> </div> </article> <!-- SIDEBAR --> <aside> <div class="sidebar-card"> <div class="sidebar-title">πŸ› οΈ Free SEO Tools</div> <a href="/scan" class="sidebar-tool">πŸ”— Broken Link Checker</a> <a href="/internal-links" class="sidebar-tool">πŸ•ΈοΈ Internal Links</a> <a href="/page-speed" class="sidebar-tool">⚑ Page Speed</a> <a href="/ssl-checker" class="sidebar-tool">πŸ”’ SSL Checker</a> <a href="/keyword-density" class="sidebar-tool">🎯 KW Density</a> <a href="/anchor-analyser" class="sidebar-tool">πŸ“Š Anchor Analyser</a> <a href="/wayback" class="sidebar-tool">πŸ•°οΈ Wayback Extractor</a> </div> <div class="sidebar-card"> <div class="sidebar-title">πŸ“° Recent Articles</div> <a href="/blog/answer-the-public-seo-content-ideas" class="recent-item"> <div class="recent-title">How to Use Answer the Public for SEO Content Ideas</div> </a> <a href="/blog/seo-for-electricians-local-guide" class="recent-item"> <div class="recent-title">SEO for Electricians β€” Get More Local Jobs from Google</div> </a> <a href="/blog/google-my-business-local-search-guide" class="recent-item"> <div class="recent-title">How to Use Google My Business to Dominate Local Search</div> </a> <a href="/blog/future-of-seo-2026-beyond" class="recent-item"> <div class="recent-title">The Future of SEO in 2026 and Beyond β€” What to Prepare For</div> </a> <a href="/blog/seo-for-online-courses" class="recent-item"> <div class="recent-title">SEO for Online Courses β€” Rank Your Course and Get Students</div> </a> </div> </aside> </div> <footer class="site-footer"> <div class="site-footer-inner"> <div class="footer-grid"> <!-- Col 1: Brand --> <div class="footer-brand"> <a href="/" class="f-logo"> <span class="nav-brand-dot"></span>SEOLinkScan </a> <p>Enterprise-grade, 100% free webmaster & SEO diagnostics. Scan for broken links, analyze anchors, audit site speed, inspect SSL certificates, and extract archived web snapshots.</p> <div style="margin-top: 14px; display: flex; gap: 8px; flex-wrap: wrap;"> <span class="badge-pill badge-brand">⚑ 100% Free</span> <span class="badge-pill badge-success">βœ“ No Signup Required</span> </div> </div> <!-- Col 2: Audit Tools --> <div class="footer-col"> <h4>Audit & Speed</h4> <ul> <li><a href="/scan">Broken Link Checker</a></li> <li><a href="/internal-links">Internal Links Audit</a></li> <li><a href="/page-speed">Page Speed & Vitals</a></li> <li><a href="/ssl-checker">SSL Certificate Test</a></li> <li><a href="/theme-detector">Theme & CMS Detector</a></li> </ul> </div> <!-- Col 3: SEO Analysis & Archive --> <div class="footer-col"> <h4>SEO & Utilities</h4> <ul> <li><a href="/anchor-analyser">Anchor Text Analyser</a></li> <li><a href="/keyword-density">Keyword Density Tool</a></li> <li><a href="/wayback">Wayback URL Extractor</a></li> <li><a href="/wayback-screenshots">Wayback Screenshots</a></li> <li><a href="/password-generator">Password Generator</a></li> </ul> </div> <!-- Col 4: Resources & Legal --> <div class="footer-col"> <h4>Company & Legal</h4> <ul> <li><a href="/blog/">SEO Blog & Guides</a></li> <li><a href="/about">About Us</a></li> <li><a href="/contact">Contact Support</a></li> <li><a href="/privacy-policy">Privacy Policy</a></li> <li><a href="/terms">Terms of Service</a></li> <li><a href="/cookie-policy">Cookie Policy</a></li> </ul> </div> </div> <!-- Bottom copyright --> <div class="footer-bottom"> <div> © 2026 <strong>SEOLinkScan</strong>. All rights reserved. </div> <div> Designed for Webmasters, Marketers & SEO Agencies. </div> </div> </div> </footer> // right before </body> on scan.php, index.php, blog-home.php, article.php, etc.) ?> <div id="cookie-consent-banner" style=" position:fixed;left:0;right:0;bottom:0;z-index:9999; background:#0f0e0b;color:#fff;padding:18px 24px; display:none;align-items:center;justify-content:space-between;gap:20px; font-family:'DM Sans',sans-serif;font-size:14px;box-shadow:0 -4px 20px rgba(0,0,0,.15); flex-wrap:wrap;"> <div style="flex:1;min-width:240px;color:#d8d6cf;line-height:1.6;"> We use cookies to run this site (essential), remember your scan preferences, and understand site usage. See our <a href="/cookie-policy" style="color:#f0a500;text-decoration:underline;">Cookie Policy</a>. </div> <div style="display:flex;gap:10px;flex-shrink:0;"> <button id="cc-reject" style="background:transparent;border:1px solid #4a473f;color:#d8d6cf;border-radius:8px;padding:9px 16px;font-size:13px;cursor:pointer;"> Essential only </button> <button id="cc-accept" style="background:#e8642c;border:none;color:#fff;border-radius:8px;padding:9px 16px;font-size:13px;font-weight:600;cursor:pointer;"> Accept all </button> </div> </div> <script> (function () { var COOKIE_NAME = 'slc_consent'; var banner = document.getElementById('cookie-consent-banner'); if (!banner) return; function getCookie(name) { var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)')); return match ? match[2] : null; } function setCookie(name, value, days) { var d = new Date(); d.setTime(d.getTime() + days * 24 * 60 * 60 * 1000); document.cookie = name + '=' + value + ';expires=' + d.toUTCString() + ';path=/;SameSite=Lax'; } function applyConsent(level) { // level: 'all' or 'essential' if (level === 'all') { // Enable analytics/AdSense personalization here if you gate those, e.g.: // loadGoogleAnalytics(); } // Essential cookies (PHPSESSID, CSRF) always load regardless β€” don't gate those. } var existing = getCookie(COOKIE_NAME); if (!existing) { banner.style.display = 'flex'; } else { applyConsent(existing); } document.getElementById('cc-accept').addEventListener('click', function () { setCookie(COOKIE_NAME, 'all', 180); applyConsent('all'); banner.style.display = 'none'; }); document.getElementById('cc-reject').addEventListener('click', function () { setCookie(COOKIE_NAME, 'essential', 180); applyConsent('essential'); banner.style.display = 'none'; }); // Lets the "Manage Cookie Preferences" button on cookie-policy.php reopen this banner window.reopenCookieBanner = function () { banner.style.display = 'flex'; }; })(); </script> </body> </html>