Lighthouse 100: How to Audit Your Meta Tags for SEO
A step-by-step checklist to optimize page headers, resolve duplicate titles, and earn 100 on Lighthouse SEO performance.
Google Lighthouse is the industry-standard tool for auditing web page quality. The SEO category specifically checks how well your page is optimized for search engine discovery. Here’s how to nail a perfect 100.
What Lighthouse SEO Checks
The SEO audit category evaluates these key areas:
| Check | What It Tests |
|---|---|
Document has a <title> |
Page has a title element |
| Document has a meta description | <meta name="description"> exists |
| Page has successful HTTP status | No 4xx/5xx responses |
| Links have descriptive text | No “click here” anchor text |
Document has valid hreflang |
Correct language alternates |
Document has valid robots.txt |
Crawlers can access the page |
| Image elements have alt text | Accessibility + SEO |
| Document uses legible font sizes | Text is readable on mobile |
| Tap targets are sized appropriately | Touch-friendly clickable areas |
The Meta Tags Checklist
1. Title Tag
Your <title> is the single most impactful on-page SEO element.
Rules:
- Keep between 30–60 characters
- Include your primary keyword near the front
- Make each page title unique across the entire site
- Don’t stuff keywords — write for humans
<!-- ✅ Good -->
<title>Open Graph Generator — Free Meta Tag Preview Tool</title>
<!-- ❌ Bad: Too long, keyword-stuffed -->
<title>Free Open Graph Generator Tool for Meta Tags OG Tags Social Media Preview Generator 2026</title>
2. Meta Description
The meta description appears as the snippet below your title in search results.
Rules:
- Keep between 120–160 characters
- Include a clear call-to-action or value proposition
- Avoid duplicate descriptions across pages
- Don’t use quotes (they get truncated in SERPs)
<meta name="description" content="Generate and preview Open Graph meta tags for 8+ social platforms. Free, real-time, no signup required." />
3. Canonical URL
Canonical tags prevent duplicate content penalties when the same page is accessible via multiple URLs.
<link rel="canonical" href="https://opengraphgenerator.com/blog/lighthouse-meta-audit" />
4. Robots Meta Tag
Control indexing behavior per page:
<!-- Default: index and follow all links -->
<meta name="robots" content="index, follow" />
<!-- Block indexing of utility pages -->
<meta name="robots" content="noindex, nofollow" />
Heading Structure
Lighthouse doesn’t explicitly audit heading hierarchy, but Google’s guidelines are clear:
- One
<h1>per page — should match the topic of the title tag - Don’t skip levels — go from
<h1>→<h2>→<h3>, not<h1>→<h3> - Use headings for structure, not for styling
Common Failures and Fixes
Duplicate Titles Across Pages
Symptom: Multiple pages share the same <title>.
Fix: Use a templated approach in your framework:
<title>{pageTitle} — {siteName}</title>
Missing Alt Text on Images
Symptom: <img> elements without alt attributes.
Fix: Add descriptive alt text to every image. For decorative images, use an empty alt:
<img src="photo.jpg" alt="Screenshot of the Open Graph Generator tool" />
<img src="divider.svg" alt="" role="presentation" />
Non-Descriptive Link Text
Symptom: Links that say “click here” or “read more”.
Fix: Make the link text describe the destination:
<!-- ❌ Bad -->
<a href="/blog/og-guide/">Click here</a>
<!-- ✅ Good -->
<a href="/blog/og-guide/">Read the Open Graph guide</a>
Running the Audit
In Chrome DevTools
- Open DevTools → Lighthouse tab
- Select SEO category
- Choose Mobile device (Google uses mobile-first indexing)
- Click Analyze page load
- Review the results and address each failing audit
Via Command Line
npx lighthouse https://your-site.com --only-categories=seo --output=json
In CI/CD
Integrate Lighthouse CI into your deployment pipeline to catch regressions:
npx @lhci/cli autorun --collect.url=https://your-site.com
Beyond Lighthouse
A perfect Lighthouse score is the floor, not the ceiling. Also consider:
- Structured data (JSON-LD) for rich results
- Open Graph tags for social sharing previews
- Core Web Vitals for ranking signals
- XML sitemaps for discovery
Use our Meta Tag Auditor and HTML Head Performance Auditor to validate your tags and inspect head performance layouts alongside your SEO audit.
Deep Technical Framework Implementations
Integrating optimized social preview tags into production web frameworks requires understanding how each runtime handles head metadata and server-side rendering:
1. Next.js App Router (layout.tsx / page.tsx)
In Next.js 14 and 15, use the centralized Metadata API to construct unified Open Graph and Twitter Card tags. This ensures that edge crawlers receive complete, pre-rendered meta tags in the initial HTML stream before client hydration:
import type { Metadata } from 'next';
export const metadata: Metadata = {
title: 'Next-Generation Web Metadata & Social Graph Suite',
description: 'Automate Open Graph, Twitter Cards, and Schema.org JSON-LD generation with sub-millisecond edge validation.',
openGraph: {
title: 'Next-Generation Web Metadata & Social Graph Suite',
description: 'Automate Open Graph, Twitter Cards, and Schema.org JSON-LD generation with sub-millisecond edge validation.',
url: 'https://opengraphgenerator.com/',
siteName: 'Open Graph Generator',
images: [
{
url: 'https://opengraphgenerator.com/images/hero-1200x630.png',
width: 1200,
height: 630,
alt: 'Open Graph Generator Dashboard Interface',
type: 'image/png',
},
],
locale: 'en_US',
type: 'website',
},
twitter: {
card: 'summary_large_image',
site: '@OpenGraphGen',
creator: '@sanjaysamanta',
title: 'Next-Generation Web Metadata & Social Graph Suite',
description: 'Automate Open Graph, Twitter Cards, and Schema.org JSON-LD generation with sub-millisecond edge validation.',
images: ['https://opengraphgenerator.com/images/hero-1200x630.png'],
},
};
For dynamic route handling in Next.js, read our comprehensive Next.js Open Graph Guide.
2. Astro Component Head Architecture
Astro’s component-first model allows you to encapsulate social sharing tags into reusable SEO layouts:
---
interface Props {
title: string;
description: string;
image?: string;
canonicalUrl?: string;
type?: 'website' | 'article';
}
const {
title,
description,
image = 'https://opengraphgenerator.com/images/default-og.png',
canonicalUrl = Astro.url.href,
type = 'website'
} = Astro.props;
---
<head>
<title>{title}</title>
<meta name="description" content={description} />
<link rel="canonical" href={canonicalUrl} />
<!-- Open Graph -->
<meta property="og:type" content={type} />
<meta property="og:site_name" content="Open Graph Generator" />
<meta property="og:title" content={title} />
<meta property="og:description" content={description} />
<meta property="og:url" content={canonicalUrl} />
<meta property="og:image" content={image} />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<!-- Twitter Cards -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@OpenGraphGen" />
<meta name="twitter:title" content={title} />
<meta name="twitter:description" content={description} />
<meta name="twitter:image" content={image} />
</head>
3. Nuxt 3 & Vue Composition API
<script setup lang="ts">
useSeoMeta({
title: 'Enterprise Social Metadata Management',
ogTitle: 'Enterprise Social Metadata Management',
description: 'Scalable Open Graph and Twitter Card automation for multi-tenant applications.',
ogDescription: 'Scalable Open Graph and Twitter Card automation for multi-tenant applications.',
ogImage: 'https://example.com/og-banner.png',
ogImageWidth: '1200',
ogImageHeight: '630',
ogUrl: 'https://example.com/enterprise/',
ogType: 'website',
twitterCard: 'summary_large_image',
twitterSite: '@OpenGraphGen',
});
</script>
Edge Caching, CDN Invalidation & HTTP Headers
To ensure that social scrapers (facebookexternalhit, Twitterbot, LinkedInBot, Slackbot, WhatsApp/2.x) always receive fresh metadata while minimizing origin server CPU load, implement a multi-tiered caching strategy:
| Asset Category | Cache-Control Header | Edge CDN TTL | Browser Cache TTL |
|---|---|---|---|
| HTML Webpages | public, max-age=0, s-maxage=600, must-revalidate |
10 Minutes | 0 Seconds (Always revalidate) |
| Static OG Images | public, max-age=31536000, immutable |
1 Year | 1 Year (Content-hashed URLs) |
| Dynamic OG API Routes | public, max-age=3600, s-maxage=86400, stale-while-revalidate=86400 |
24 Hours | 1 Hour |
# NGINX Edge Caching Configuration for Social Scraping
location ~* \.(html)$ {
add_header Cache-Control "public, max-age=0, s-maxage=600, must-revalidate";
add_header X-Robots-Tag "all";
}
location ~* \.(png|jpg|jpeg|webp)$ {
add_header Cache-Control "public, max-age=31536000, immutable";
add_header Access-Control-Allow-Origin "*";
}
Comprehensive Troubleshooting & Error Code Resolution Matrix
When debugging failed link previews across development, staging, and production environments, refer to this error resolution matrix:
| HTTP Status / Error | Scraper Behavior | Root Cause | Actionable Developer Fix |
|---|---|---|---|
| 401 Unauthorized | Plain URL rendered, no image or text | Staging environment protected by Basic Auth or IP whitelist | Allowlist crawler User-Agent strings or test on public preview URLs. |
| 403 Forbidden | Scraper skips metadata extraction | Web Application Firewall (WAF) or Cloudflare Bot Management blocking scrapers | Add WAF custom rules to bypass verified social bots (Twitterbot, facebookexternalhit, LinkedInBot). |
| 404 Not Found | Error page metadata cached | Scraped URL does not exist or has an unhandled redirect | Ensure canonical trailing slashes match server routing. Inspect with Head Auditor. |
| SSL Handshake Failure | Scraper aborts connection immediately | Missing intermediate SSL certificate or expired TLS cert | Install full certificate bundle. Audit security with Security Headers. |
| Timeout (3.0s+) | Text-only link with no thumbnail | Slow server response time or SSR cold starts | Cache HTML responses at the edge or use static pre-rendering. |
| Stale Preview Cache | Shows old headline/image after deploy | Social platform CDN cache still active | Invalidate via Facebook Debugger or LinkedIn Post Inspector. |
For an in-depth walkthrough on cache purging, read How to Fix Cached Previews on LinkedIn & WhatsApp.
The Complete Technical SEO & Social Ecosystem
A world-class digital presence requires harmonizing social metadata, search engine rich results, crawl directives, and AI agent context:
- Live URL Inspection: Audit your production URLs with our Open Graph Inspector to detect missing properties before publishing.
- Twitter Card Generation: Ensure large banner rendering with our Twitter Card Generator.
- Structured Search Data: Unlock star ratings and FAQ rich snippets with our JSON-LD Schema Generator and validate with our Schema Inspector.
- Crawl Budget Management: Verify search engine bot permissions using our Robots Simulator and build compliant files with our Robots.txt Builder.
- AI Knowledge Architecture: Format repository knowledge for AI coding agents (Cursor, Claude Code, Windsurf) using the Open Knowledge Format (OKF) Generator and explore the OKF Developer Guide.
Generate and validate your full metadata stack with our free Open Graph Generator today!