<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Theo</title>
    <description>The latest articles on DEV Community by Theo (@theo_dcrx).</description>
    <link>https://dev.to/theo_dcrx</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3840816%2F6dace103-2d62-4faa-a8d1-39f40588fb6a.jpg</url>
      <title>DEV Community: Theo</title>
      <link>https://dev.to/theo_dcrx</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/theo_dcrx"/>
    <language>en</language>
    <item>
      <title>Why HTML Errors Hurt Your SEO Rankings</title>
      <dc:creator>Theo</dc:creator>
      <pubDate>Tue, 24 Mar 2026 22:23:43 +0000</pubDate>
      <link>https://dev.to/theo_dcrx/why-html-errors-hurt-your-seo-rankings-ihm</link>
      <guid>https://dev.to/theo_dcrx/why-html-errors-hurt-your-seo-rankings-ihm</guid>
      <description>&lt;p&gt;Google says HTML validation isn't a direct ranking factor. But that doesn't mean HTML errors are harmless. Broken markup affects how Google crawls, renders, and understands your content. Here's how.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Official Google Position
&lt;/h2&gt;

&lt;p&gt;Google has repeatedly stated that HTML validation is not a direct ranking signal. John Mueller confirmed this in multiple Google Search Central hangouts. Your page won't rank lower just because it has a few HTML errors.&lt;/p&gt;

&lt;p&gt;But here's the nuance: while Google doesn't penalize invalid HTML directly, the &lt;em&gt;consequences&lt;/em&gt; of HTML errors absolutely affect ranking factors. Broken HTML causes rendering issues, accessibility failures, and crawling problems that indirectly hurt your SEO.&lt;/p&gt;

&lt;h2&gt;
  
  
  How HTML Errors Indirectly Hurt Rankings
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Broken Structured Data
&lt;/h3&gt;

&lt;p&gt;If your HTML has unclosed tags or improper nesting around your schema markup, Google may fail to parse your structured data. This means no rich snippets in search results: no star ratings, no FAQ dropdowns, no event dates. Rich snippets significantly increase click-through rates.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;itemscope&lt;/span&gt; &lt;span class="na"&gt;itemtype=&lt;/span&gt;&lt;span class="s"&gt;"https://schema.org/Product"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;itemprop=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Widget&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;itemprop=&lt;/span&gt;&lt;span class="s"&gt;"offers"&lt;/span&gt; &lt;span class="na"&gt;itemscope&lt;/span&gt; &lt;span class="na"&gt;itemtype=&lt;/span&gt;&lt;span class="s"&gt;"https://schema.org/Offer"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;itemprop=&lt;/span&gt;&lt;span class="s"&gt;"price"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;29.99&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
  &lt;span class="c"&gt;&amp;lt;!-- missing closing &amp;lt;/div&amp;gt; breaks schema --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Missing or Broken Heading Hierarchy
&lt;/h3&gt;

&lt;p&gt;Google uses heading tags (H1-H6) to understand content structure and topical hierarchy. If your HTML errors cause headings to nest incorrectly, or if you skip heading levels (H1 to H3 with no H2), Google has a harder time understanding what your page is about.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Main Title&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;Subsection&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;    &lt;span class="c"&gt;&amp;lt;!-- skipped H2 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Another Section&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!-- confusing hierarchy --&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Missing Alt Text on Images
&lt;/h3&gt;

&lt;p&gt;Images without alt attributes are invisible to Google Image Search and screen readers. If you have product images, infographics, or diagrams without alt text, you're missing a significant source of organic traffic. Google Image Search drives billions of visits per month.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Bad: no alt attribute --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"product.jpg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- Good: descriptive alt text --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"product.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Blue wireless headphones with noise cancellation"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Duplicate IDs Break JavaScript and Tracking
&lt;/h3&gt;

&lt;p&gt;Duplicate ID attributes cause JavaScript to target wrong elements. If your analytics scripts or conversion tracking rely on element IDs, duplicate IDs mean inaccurate data. Bad data leads to bad decisions about what content works.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Unclosed Tags Break Rendering
&lt;/h3&gt;

&lt;p&gt;An unclosed div or span can cause all subsequent content to be nested inside the wrong element. This can break your layout on Google's rendering engine (Chromium-based), causing the content to appear differently than intended. If Google renders your page and the main content is hidden or misplaced, it may not be indexed properly.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Missing Meta Tags Kill Click-Through Rate
&lt;/h3&gt;

&lt;p&gt;A missing or poorly written title tag and meta description directly affect how many people click on your search result. Even if you rank #1, a bad snippet means fewer clicks. Google measures click-through rate as a ranking signal. Over time, a low CTR pushes you down.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Accessibility Failures Correlate with Rankings
&lt;/h3&gt;

&lt;p&gt;Google has increasingly emphasized page experience. Sites that fail basic accessibility checks (missing alt text, no form labels, broken ARIA attributes) tend to have higher bounce rates and lower engagement. These behavioral signals affect rankings indirectly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real-World Impact
&lt;/h2&gt;

&lt;p&gt;Consider two competing pages targeting the same keyword. Both have similar content quality and backlink profiles. Page A has clean HTML, proper structured data, all images with alt text, and correct heading hierarchy. Page B has 30 HTML errors, broken schema, and missing alt text.&lt;/p&gt;

&lt;p&gt;Page A will likely outperform Page B over time. Not because Google penalizes bad HTML, but because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Page A gets rich snippets, Page B does not&lt;/li&gt;
&lt;li&gt;Page A appears in image search, Page B does not&lt;/li&gt;
&lt;li&gt;Page A has higher CTR from better meta tags&lt;/li&gt;
&lt;li&gt;Page A renders correctly on all devices&lt;/li&gt;
&lt;li&gt;Page A has lower bounce rate due to proper layout&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What to Prioritize
&lt;/h2&gt;

&lt;p&gt;Not all HTML errors are equal. Here's what matters most for SEO, in priority order:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Critical:&lt;/strong&gt; Missing title tags, broken structured data, missing alt text on important images, unclosed tags that break layout&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Incorrect heading hierarchy, missing meta descriptions, duplicate IDs, missing canonical URLs&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nice to fix:&lt;/strong&gt; Deprecated HTML elements, minor nesting issues, missing optional attributes&lt;/p&gt;




&lt;p&gt;Check your HTML for all these SEO issues with our free tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://validatehtml.com" rel="noopener noreferrer"&gt;HTML Validator&lt;/a&gt; - Quality score and detailed error reports&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://validatehtml.com/meta-tag-checker" rel="noopener noreferrer"&gt;Meta Tag Checker&lt;/a&gt; - Validate title, description, OG tags&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://validatehtml.com/accessibility-checker" rel="noopener noreferrer"&gt;Accessibility Checker&lt;/a&gt; - Audit WCAG and a11y issues&lt;/li&gt;
&lt;li&gt;&lt;a href="https://validatehtml.com/tools" rel="noopener noreferrer"&gt;All 12 Tools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>codequality</category>
      <category>google</category>
      <category>html</category>
      <category>webdev</category>
    </item>
    <item>
      <title>HTML Validation Checklist Before Going Live</title>
      <dc:creator>Theo</dc:creator>
      <pubDate>Tue, 24 Mar 2026 22:15:25 +0000</pubDate>
      <link>https://dev.to/theo_dcrx/html-validation-checklist-before-going-live-4ba6</link>
      <guid>https://dev.to/theo_dcrx/html-validation-checklist-before-going-live-4ba6</guid>
      <description>&lt;p&gt;25 essential checks to run before deploying your website. Covers HTML structure, SEO, accessibility, social sharing, and performance. Use the &lt;a href="https://validatehtml.com" rel="noopener noreferrer"&gt;ValidateHTML validator&lt;/a&gt; to automate most of these checks.&lt;/p&gt;

&lt;h2&gt;
  
  
  HTML Structure
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;Valid DOCTYPE declaration&lt;/strong&gt; - Every page starts with &lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/code&gt;. Without it, browsers switch to quirks mode and render inconsistently.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;No unclosed tags&lt;/strong&gt; - Every opening tag has a matching closing tag. Unclosed divs and spans cascade layout bugs.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Proper nesting&lt;/strong&gt; - Tags are nested correctly. No &lt;code&gt;&amp;lt;div&amp;gt;&amp;lt;p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/p&amp;gt;&lt;/code&gt; patterns that break document structure.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;No duplicate IDs&lt;/strong&gt; - Every id attribute is unique on the page. Duplicate IDs break JavaScript selectors and accessibility.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Valid character encoding&lt;/strong&gt; - &lt;code&gt;&amp;lt;meta charset="UTF-8"&amp;gt;&lt;/code&gt; is the first tag in &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;. Prevents garbled characters on international content.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Language attribute set&lt;/strong&gt; - &lt;code&gt;&amp;lt;html lang="en"&amp;gt;&lt;/code&gt; is set. Helps screen readers pronounce content correctly and search engines serve the right version.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  SEO Essentials
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;Unique title tag on every page&lt;/strong&gt; - Under 60 characters, primary keyword first. The most important on-page SEO element.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Meta description present&lt;/strong&gt; - Under 160 characters, compelling, includes target keyword. Affects click-through rate from search results.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Canonical URL set&lt;/strong&gt; - &lt;code&gt;&amp;lt;link rel="canonical"&amp;gt;&lt;/code&gt; points to the preferred URL. Prevents duplicate content issues.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Heading hierarchy is correct&lt;/strong&gt; - One H1 per page, followed by H2s, then H3s. No skipped levels (H1 directly to H3).&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;All images have alt text&lt;/strong&gt; - Descriptive alt attributes on every img tag. Required for accessibility and image SEO.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;robots.txt is valid&lt;/strong&gt; - No accidental disallow rules blocking important pages. Sitemap URL is declared.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;XML sitemap is submitted&lt;/strong&gt; - Sitemap.xml lists all important pages and is submitted to Google Search Console.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Social Sharing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;Open Graph tags present&lt;/strong&gt; - og:title, og:description, og:image, og:url, and og:type are set on every page.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;OG image is 1200x630px&lt;/strong&gt; - The recommended size for all major platforms. Must be an absolute URL.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Twitter card tag set&lt;/strong&gt; - At minimum twitter:card is set to summary_large_image for full-width previews.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Social preview tested&lt;/strong&gt; - Check how your page looks when shared on Facebook, LinkedIn, and Twitter before launch.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Accessibility
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;All images have alt attributes&lt;/strong&gt; - Screen readers need alt text to describe images to visually impaired users.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Form inputs have labels&lt;/strong&gt; - Every input, select, and textarea has an associated &lt;code&gt;&amp;lt;label&amp;gt;&lt;/code&gt; element.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Color contrast is sufficient&lt;/strong&gt; - Text has at least 4.5:1 contrast ratio against its background (WCAG AA).&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Page is keyboard navigable&lt;/strong&gt; - All interactive elements can be reached and activated with keyboard only.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Performance
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;No render-blocking resources&lt;/strong&gt; - CSS and JS in &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; block rendering. Use async/defer for scripts, inline critical CSS.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Images are optimized&lt;/strong&gt; - Use WebP/AVIF, proper dimensions, lazy loading on below-fold images.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Page weight is reasonable&lt;/strong&gt; - Total page size under 3MB for good mobile performance.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;CSS is valid&lt;/strong&gt; - Invalid CSS is silently ignored by browsers, causing invisible bugs.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Run all these checks automatically with our free tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://validatehtml.com" rel="noopener noreferrer"&gt;HTML Validator&lt;/a&gt; - Check HTML structure and quality&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://validatehtml.com/meta-tag-checker" rel="noopener noreferrer"&gt;Meta Tag Checker&lt;/a&gt; - Validate SEO meta tags&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://validatehtml.com/open-graph-checker" rel="noopener noreferrer"&gt;Open Graph Checker&lt;/a&gt; - Test social sharing&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://validatehtml.com/accessibility-checker" rel="noopener noreferrer"&gt;Accessibility Checker&lt;/a&gt; - Audit WCAG issues&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://validatehtml.com/css-validator" rel="noopener noreferrer"&gt;CSS Validator&lt;/a&gt; - Validate stylesheets&lt;/li&gt;
&lt;li&gt;&lt;a href="https://validatehtml.com/tools" rel="noopener noreferrer"&gt;All 12 Tools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
      <category>html</category>
      <category>tooling</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Open Graph Tags: The Complete Guide</title>
      <dc:creator>Theo</dc:creator>
      <pubDate>Tue, 24 Mar 2026 22:10:39 +0000</pubDate>
      <link>https://dev.to/theo_dcrx/open-graph-tags-the-complete-guide-3ap9</link>
      <guid>https://dev.to/theo_dcrx/open-graph-tags-the-complete-guide-3ap9</guid>
      <description>&lt;p&gt;Open Graph tags control how your pages look when shared on Facebook, LinkedIn, Twitter, Slack, Discord, and more. This guide covers everything from basic setup to platform-specific requirements. Test your own tags with the &lt;a href="https://validatehtml.com/open-graph-checker" rel="noopener noreferrer"&gt;ValidateHTML Open Graph checker&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is the Open Graph Protocol?
&lt;/h2&gt;

&lt;p&gt;Open Graph (OG) is a protocol created by Facebook in 2010 that turns any web page into a rich object in a social graph. When you share a URL on social media, the platform reads OG tags from the page's HTML to determine what title, description, and image to display in the preview card.&lt;/p&gt;

&lt;p&gt;Without OG tags, platforms try to extract this information automatically. The results are unpredictable: wrong images, truncated titles, missing descriptions. OG tags give you full control over your social media appearance.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 4 Required OG Tags
&lt;/h2&gt;

&lt;p&gt;According to the Open Graph protocol, these four tags are required for every page:&lt;/p&gt;

&lt;h3&gt;
  
  
  og:title
&lt;/h3&gt;

&lt;p&gt;The title of your content as it should appear on social media. Can differ from your HTML title tag to be more engaging for social audiences.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"How to Validate HTML in 2026"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep under 90 characters. Facebook truncates at ~88 characters, LinkedIn at ~70.&lt;/p&gt;

&lt;h3&gt;
  
  
  og:type
&lt;/h3&gt;

&lt;p&gt;The type of content. Most pages use "website" or "article".&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:type"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"website"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;   &lt;span class="c"&gt;&amp;lt;!-- homepages, tools --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:type"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"article"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;   &lt;span class="c"&gt;&amp;lt;!-- blog posts --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:type"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"product"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;   &lt;span class="c"&gt;&amp;lt;!-- e-commerce --&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  og:image
&lt;/h3&gt;

&lt;p&gt;The image shown in the social card. This is the most impactful OG tag. Posts with images get significantly more engagement than text-only cards.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:image"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/og-image.jpg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Recommended size:&lt;/strong&gt; 1200 x 630px (1.91:1 ratio)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimum size:&lt;/strong&gt; 600 x 315px&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Max file size:&lt;/strong&gt; 5MB (some platforms reject larger files)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Format:&lt;/strong&gt; JPG, PNG, or WebP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;URL:&lt;/strong&gt; Must be absolute (https://...), not relative&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  og:url
&lt;/h3&gt;

&lt;p&gt;The canonical URL of the page. When someone shares a URL with query parameters, this tells platforms which URL is the "real" one.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:url"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/page"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Recommended Additional Tags
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Your Title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"A compelling 1-2 sentence description."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:image"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/image-1200x630.jpg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:image:width"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"1200"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:image:height"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"630"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:image:alt"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Description of the image"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:url"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/page"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:type"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"website"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:site_name"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Your Brand"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:locale"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"en_US"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;og:description&lt;/strong&gt; appears below the title in most platforms. Keep it under 200 characters. Write it for social audiences, not search engines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;og:image:width&lt;/strong&gt; and &lt;strong&gt;og:image:height&lt;/strong&gt; help platforms render the card without waiting for the image to load. Always include them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Platform-Specific Requirements
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Image Size&lt;/th&gt;
&lt;th&gt;Title Limit&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Facebook&lt;/td&gt;
&lt;td&gt;1200x630&lt;/td&gt;
&lt;td&gt;~88 chars&lt;/td&gt;
&lt;td&gt;Caches aggressively. Use their debugger to refresh.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LinkedIn&lt;/td&gt;
&lt;td&gt;1200x627&lt;/td&gt;
&lt;td&gt;~70 chars&lt;/td&gt;
&lt;td&gt;Uses OG tags. Also reads article:author for articles.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Twitter/X&lt;/td&gt;
&lt;td&gt;1200x628&lt;/td&gt;
&lt;td&gt;~70 chars&lt;/td&gt;
&lt;td&gt;Requires twitter:card tag. Falls back to OG tags.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slack&lt;/td&gt;
&lt;td&gt;1200x630&lt;/td&gt;
&lt;td&gt;No limit&lt;/td&gt;
&lt;td&gt;Reads OG tags. Shows unfurled preview in messages.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Discord&lt;/td&gt;
&lt;td&gt;1200x630&lt;/td&gt;
&lt;td&gt;~256 chars&lt;/td&gt;
&lt;td&gt;Reads OG tags. Supports og:video for embedded players.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Common Mistakes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Relative image URLs&lt;/strong&gt; - og:image must be an absolute URL starting with https://. Relative paths like /images/og.jpg do not work on any platform.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image too small&lt;/strong&gt; - Images under 600x315px may not be displayed at all, or appear as a tiny thumbnail instead of a full card.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missing og:image&lt;/strong&gt; - Without an image, social cards look plain and get significantly less engagement. Always include an og:image.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not testing after changes&lt;/strong&gt; - Facebook and LinkedIn cache OG data aggressively. After updating your tags, you must clear their cache using their debugging tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Same OG tags on every page&lt;/strong&gt; - Each page should have unique og:title, og:description, and og:image. Reusing the same tags defeats the purpose.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Debug OG Tags
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use the ValidateHTML Open Graph Checker&lt;/strong&gt; to see exactly which tags are detected on any URL, with a live social media preview.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Facebook Sharing Debugger&lt;/strong&gt; (developers.facebook.com/tools/debug/) shows what Facebook reads and lets you clear the cache with "Scrape Again".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Twitter Card Validator&lt;/strong&gt; (cards-dev.twitter.com/validator) previews how your card looks on Twitter/X.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LinkedIn Post Inspector&lt;/strong&gt; (linkedin.com/post-inspector/) previews and refreshes LinkedIn's cache of your OG data.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;Test your Open Graph tags now with our free &lt;a href="https://validatehtml.com/open-graph-checker" rel="noopener noreferrer"&gt;Open Graph Checker&lt;/a&gt; or validate all your meta tags with the &lt;a href="https://validatehtml.com/meta-tag-checker" rel="noopener noreferrer"&gt;Meta Tag Checker&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Meta Tags Cheat Sheet for SEO in 2026</title>
      <dc:creator>Theo</dc:creator>
      <pubDate>Tue, 24 Mar 2026 21:56:39 +0000</pubDate>
      <link>https://dev.to/theo_dcrx/meta-tags-cheat-sheet-for-seo-in-2026-4h4a</link>
      <guid>https://dev.to/theo_dcrx/meta-tags-cheat-sheet-for-seo-in-2026-4h4a</guid>
      <description>&lt;p&gt;Every meta tag you need for search engines, social media, and browsers. Copy-paste templates, character limits, and common mistakes to avoid. Check your own tags with the &lt;a href="https://validatehtml.com/meta-tag-checker" rel="noopener noreferrer"&gt;ValidateHTML meta tag checker&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Essential Meta Tags (Every Page Needs These)
&lt;/h2&gt;

&lt;p&gt;These tags should be on every single page of your website. Missing any of them means lost SEO value or a broken mobile experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Title Tag
&lt;/h3&gt;

&lt;p&gt;The single most important on-page SEO element. Appears in search results, browser tabs, and bookmarks.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Primary Keyword - Secondary Keyword | Brand&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Max length:&lt;/strong&gt; 60 characters (Google truncates after ~580px width)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tip:&lt;/strong&gt; Front-load your primary keyword. Users scan the first few words.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mistake:&lt;/strong&gt; Using the same title on multiple pages. Every page needs a unique title.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Meta Description
&lt;/h3&gt;

&lt;p&gt;Not a ranking factor, but directly affects click-through rate from search results. Google may rewrite it if it doesn't match the query.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Free online HTML validator with quality scores. Check HTML, CSS, JSON, XML, meta tags, and more in one place. No signup required."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Max length:&lt;/strong&gt; 155-160 characters&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tip:&lt;/strong&gt; Include a call to action and your primary keyword naturally.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mistake:&lt;/strong&gt; Stuffing keywords. Write for humans, not bots.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Viewport
&lt;/h3&gt;

&lt;p&gt;Required for responsive design. Without it, mobile devices render at desktop width.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Charset
&lt;/h3&gt;

&lt;p&gt;Declares the character encoding. Must be the first tag in the head (within the first 1024 bytes).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Language
&lt;/h3&gt;

&lt;p&gt;Set on the html element, not as a meta tag. Helps search engines serve the right language version.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Open Graph Tags (Social Sharing)
&lt;/h2&gt;

&lt;p&gt;Control how your page looks when shared on Facebook, LinkedIn, Slack, Discord, and other platforms. Without these, platforms guess your content with poor results.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Your Page Title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"A compelling description under 200 characters."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:image"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/image-1200x630.jpg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:url"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/page"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:type"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"website"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:site_name"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Your Brand"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Image size:&lt;/strong&gt; 1200 x 630px (1.91:1 ratio)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image format:&lt;/strong&gt; JPG or PNG, under 5MB&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;URLs:&lt;/strong&gt; Must be absolute (https://...), not relative&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Twitter / X Card Tags
&lt;/h2&gt;

&lt;p&gt;Twitter falls back to OG tags, but you need at minimum the twitter:card tag to control the card format.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"twitter:card"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"summary_large_image"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"twitter:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Your Title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"twitter:description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Your description."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"twitter:image"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/image.jpg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;summary_large_image:&lt;/strong&gt; Full-width image card (recommended)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;summary:&lt;/strong&gt; Small thumbnail on the left&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  SEO Control Tags
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Canonical URL
&lt;/h3&gt;

&lt;p&gt;Tells search engines which URL is the original when duplicate content exists (www vs non-www, HTTP vs HTTPS, query parameters).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"canonical"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/page"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Robots
&lt;/h3&gt;

&lt;p&gt;Controls whether search engines index the page and follow its links.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"robots"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"index, follow"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;       &lt;span class="c"&gt;&amp;lt;!-- default --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"robots"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"noindex, follow"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;      &lt;span class="c"&gt;&amp;lt;!-- don't index but follow links --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"robots"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"noindex, nofollow"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;     &lt;span class="c"&gt;&amp;lt;!-- hide completely --&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Hreflang (Multi-language)
&lt;/h3&gt;

&lt;p&gt;For sites with content in multiple languages. Tells Google which language version to serve in each market.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"alternate"&lt;/span&gt; &lt;span class="na"&gt;hreflang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/en/page"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"alternate"&lt;/span&gt; &lt;span class="na"&gt;hreflang=&lt;/span&gt;&lt;span class="s"&gt;"fr"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/fr/page"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"alternate"&lt;/span&gt; &lt;span class="na"&gt;hreflang=&lt;/span&gt;&lt;span class="s"&gt;"x-default"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/page"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Complete Copy-Paste Template
&lt;/h2&gt;

&lt;p&gt;Here's a complete head section with every essential meta tag. Copy it, replace the values, and you're set.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Your Page Title | Brand Name&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Your compelling description under 160 characters."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"canonical"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/page"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- Open Graph --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Your Page Title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Description for social sharing."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:image"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/og-image-1200x630.jpg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:url"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/page"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:type"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"website"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- Twitter --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"twitter:card"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"summary_large_image"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- Optional --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"robots"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"index, follow"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Check your own meta tags with our free &lt;a href="https://validatehtml.com/meta-tag-checker" rel="noopener noreferrer"&gt;Meta Tag Checker&lt;/a&gt; or test your social sharing with the &lt;a href="https://validatehtml.com/open-graph-checker" rel="noopener noreferrer"&gt;Open Graph Checker&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>html</category>
      <category>resources</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Fix the 10 Most Common HTML Errors</title>
      <dc:creator>Theo</dc:creator>
      <pubDate>Mon, 23 Mar 2026 22:17:11 +0000</pubDate>
      <link>https://dev.to/theo_dcrx/how-to-fix-the-10-most-common-html-errors-4fic</link>
      <guid>https://dev.to/theo_dcrx/how-to-fix-the-10-most-common-html-errors-4fic</guid>
      <description>&lt;p&gt;Every HTML validator report has the same usual suspects. Here are the 10 errors I see most often,with the fix for each one.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://validatehtml.com" rel="noopener noreferrer"&gt;ValidateHTML&lt;/a&gt; to catch these automatically, but knowing &lt;em&gt;why&lt;/em&gt; they matter is just as important as fixing them.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Missing alt Attribute on Images
&lt;/h2&gt;

&lt;p&gt;Every &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; needs an &lt;code&gt;alt&lt;/code&gt;. Screen readers depend on it. Google Images indexes it. It's the #1 accessibility violation on the web.&lt;/p&gt;

&lt;p&gt;❌ Invalid:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"hero.jpg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✓ Valid:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"hero.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Mountain landscape at sunset"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For decorative images, use &lt;code&gt;alt=""&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Unclosed Tags
&lt;/h2&gt;

&lt;p&gt;A missing &lt;code&gt;&amp;lt;/p&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;/div&amp;gt;&lt;/code&gt; can shift your entire layout. Browsers auto-close silently,usually wrong.&lt;/p&gt;

&lt;p&gt;❌ Invalid:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Some content
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✓ Valid:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Some content&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Deprecated Elements
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;center&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;font&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;marquee&amp;gt;&lt;/code&gt;,still render, but signal outdated code.&lt;/p&gt;

&lt;p&gt;❌ Deprecated:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;center&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;font&lt;/span&gt; &lt;span class="na"&gt;size=&lt;/span&gt;&lt;span class="s"&gt;"5"&lt;/span&gt; &lt;span class="na"&gt;color=&lt;/span&gt;&lt;span class="s"&gt;"red"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Hello&lt;span class="nt"&gt;&amp;lt;/font&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/center&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✓ Modern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"text-align: center"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"font-size: 1.25rem; color: red;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Hello&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4. Missing DOCTYPE
&lt;/h2&gt;

&lt;p&gt;Without &lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/code&gt;, browsers enter quirks mode. Box model, margins, tables,everything behaves differently.&lt;/p&gt;

&lt;p&gt;✓ Always start with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. Missing lang Attribute
&lt;/h2&gt;

&lt;p&gt;Screen readers pick the wrong pronunciation. Browser translation breaks. One attribute fixes it.&lt;/p&gt;

&lt;p&gt;❌ Missing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✓ Correct:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  6. Duplicate IDs
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;getElementById()&lt;/code&gt; returns the first match only. Anchor links break. Screen readers get confused.&lt;/p&gt;

&lt;p&gt;❌ Duplicate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"header"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Site header&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"header"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Page header&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✓ Unique:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"site-header"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Site header&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"page-header"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Page header&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  7. Incorrect Nesting
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; can't contain &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;. &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; can't contain &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;. Browsers restructure your DOM silently.&lt;/p&gt;

&lt;p&gt;❌ Invalid:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;This breaks the paragraph&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✓ Correct:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Paragraph text&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;Block content&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  8. Missing Viewport Meta Tag
&lt;/h2&gt;

&lt;p&gt;Without it, mobile browsers render at desktop width. Your responsive CSS doesn't kick in. Google's mobile-first indexing checks for this.&lt;/p&gt;

&lt;p&gt;✓ Always include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  9. Empty Headings
&lt;/h2&gt;

&lt;p&gt;An &lt;code&gt;&amp;lt;h2&amp;gt;&amp;lt;/h2&amp;gt;&lt;/code&gt; with no text = broken document outline, wasted SEO value, confused screen readers.&lt;/p&gt;

&lt;p&gt;❌ Empty:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;h2&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"section-icon"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✓ With content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;h2&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"section-icon"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Our Features&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  10. Excessive Inline Styles
&lt;/h2&gt;

&lt;p&gt;Not invalid HTML, but a strong code smell. Can't be cached, reused, or maintained.&lt;/p&gt;

&lt;p&gt;⚠ Avoid:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"color: red; font-size: 18px; margin: 20px 0;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Text&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✓ Better:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"error-message"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Text&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.error-message&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;18px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Check Your Code
&lt;/h2&gt;

&lt;p&gt;You can paste your HTML or enter any URL in &lt;a href="https://validatehtml.com" rel="noopener noreferrer"&gt;ValidateHTML&lt;/a&gt;,it catches all 10 of these automatically, shows line numbers, and gives you a quality score (0-100 with letter grades).&lt;/p&gt;

&lt;p&gt;Free, no login required.&lt;/p&gt;

&lt;p&gt;For detailed guides on each error with step-by-step fixes: &lt;a href="https://validatehtml.com/html-errors" rel="noopener noreferrer"&gt;HTML Errors Guide&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>html</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
