# 25. Sitemap, Robots.txt & Open Graph meta: id: web-production-25 feature: web-production priority: P2 depends_on: [] tags: [seo, marketing, production] objective: - Implement SEO fundamentals including sitemap, robots.txt, and Open Graph meta tags for all pages deliverables: - Dynamic sitemap.xml generation - robots.txt configuration - Open Graph meta tags on all pages - Twitter Card meta tags - Canonical URLs steps: 1. Create dynamic sitemap: - Route: /sitemap.xml - Include all public pages: /, /about, /features, /pricing, /blog/* - Include auth pages: /login, /signup - Exclude admin pages and user-specific pages - Set priorities and change frequencies - Auto-update when blog posts published 2. Create robots.txt: - Allow: all public pages - Disallow: /(admin)/*, /api/*, /billing/*, /auth/* - Sitemap reference - Crawl-delay for respectful crawling 3. Add Open Graph tags to all pages: - og:title matching page title - og:description from meta description - og:image with branded preview image (1200x630) - og:url with canonical URL - og:type (website, article for blog) - og:site_name: Kordant 4. Add Twitter Card tags: - twitter:card: summary_large_image - twitter:title, twitter:description, twitter:image 5. Add canonical URLs: - Prevent duplicate content issues - Use absolute URLs with https - Handle query parameters correctly 6. Create branded OG image: - Design 1200x630px image with Kordant branding - Include logo, tagline, and shield icon - Generate dynamically for blog posts (optional) 7. Add structured data: - Organization schema on homepage - WebSite schema with SearchAction - Article schema for blog posts - SoftwareApplication schema for app tests: - Unit: Test sitemap XML generation - Integration: Verify meta tags on all pages - SEO: Test with Facebook Sharing Debugger and Twitter Card Validator acceptance_criteria: - Sitemap accessible at /sitemap.xml with all public pages - robots.txt accessible at /robots.txt with correct directives - Open Graph tags present on all public pages - Twitter Card tags present on all public pages - Canonical URL on every page - Branded OG image displaying correctly in social shares - Structured data valid per schema.org (test with Google Rich Results) - Blog posts have Article schema validation: - `curl /sitemap.xml` → valid XML with all routes - `curl /robots.txt` → correct allow/disallow directives - Facebook Sharing Debugger → OG image and title display correctly - Google Rich Results Test → structured data valid - View page source → all meta tags present notes: - SolidJS MetaProvider already in use — extend with OG tags - Use @solidjs/meta for dynamic meta tags per route - Consider using @vercel/og or similar for dynamic OG images - Blog sitemap should update automatically on publish