Validate SEO metadata across the PM Philosophy Map including meta tags, OpenGraph images, canonical URLs, and domain references. Triggered when asked to verify SEO, check metadata, or audit site SEO.
Validate and audit all SEO metadata across the PM Philosophy Map to ensure optimal search engine visibility and social media sharing.
Files to verify:
app/layout.tsx - Root metadataapp/episodes/[slug]/layout.tsx - Episode-specific metadataapp/results/page.tsx - Results page metadataapp/quiz/page.tsx - Quiz page metadataapp/explore/page.tsx - Explore page metadataValidate:
Check all pages for:
og:title - Present and descriptiveog:description - Present and compellingog:image - Valid path, proper dimensions (1200x630)og:url - Uses correct domainog:type - Appropriate (website/article)og:site_name - Consistent brandingValidate:
twitter:card - Set to "summary_large_image"twitter:title - Optimized for Twittertwitter:description - Under 200 charstwitter:image - Valid OG image pathtwitter:creator - Set to @lennysanSearch codebase for:
localhost:3000 - Should use lenny.productbuilder.nethttp://localhost - Should use production domainprocess.env.NEXT_PUBLIC_BASE_URL or correct fallbackVerify:
app/sitemap.ts generates valid XMLCheck:
/public/og-image.png exists (1200x630)/public/og/[slug].png/public/favicon.svg exists# Read all layout and page files
Read app/layout.tsx
Read app/episodes/[slug]/layout.tsx
# Check for missing or malformed metadata
# Find localhost references
Grep -r "localhost" in app/, lib/, components/
# Find hardcoded domains
Grep -r "pmphilosophy.com|http://" in codebase
# Check if OG images exist
ls public/og-image.png
ls public/og/*.png (episode images)
# Verify dimensions with identify or similar
# Build and check sitemap
npm run build
curl http://localhost:3000/sitemap.xml
# Verify no localhost URLs in output
Output format:
# SEO Audit Report - [Date]
## ✅ Passed Checks
- Root metadata properly configured
- OpenGraph tags present on all pages
- Twitter cards configured correctly
## ⚠️ Issues Found
1. **Episode layouts using hardcoded domain**: app/episodes/[slug]/layout.tsx:23
- Fix: Use process.env.NEXT_PUBLIC_BASE_URL
2. **Missing OG image**: public/og/new-episode.png
- Fix: Generate OG image for new episode
## 📋 Recommendations
- Add structured data (JSON-LD) for episodes
- Consider adding breadcrumb navigation metadata
- Optimize meta descriptions for better CTR
grep -r "localhost" app/ lib/ components/ --include="*.tsx" --include="*.ts"
grep -r "export.*metadata\|generateMetadata" app/ --include="*.tsx"
ls -lh public/og/ | wc -l # Count episode OG images
verify-sitemap - Deep dive into sitemap validationupdate-og-images - Batch generate/update OG images