SEO improvements for better search engine optimization:
1. Canonical URL - Added client-side dynamic canonical link tags for posts and pages
2. Single H1 per page - Markdown H1s demoted to H2 with .blog-h1-demoted class (maintains H1 visual styling)
3. DOM order fix - Article now loads before sidebar in DOM for SEO (CSS order property maintains visual layout)
4. X-Robots-Tag - HTTP header added via netlify.toml (index, follow for public; noindex for dashboard/api routes)
5. Hreflang tags - Self-referencing hreflang (en, x-default) for language targeting
6. og:url consistency - Uses same canonicalUrl variable as canonical link tag
7. twitter:site - New TwitterConfig in siteConfig.ts for Twitter Cards meta tags
Files modified:
- src/config/siteConfig.ts: Added TwitterConfig interface with site/creator fields
- src/pages/Post.tsx: SEO meta tags for posts/pages, DOM order optimization
- src/components/BlogPost.tsx: H1 to H2 demotion in markdown renderer
- src/styles/global.css: .blog-h1-demoted class, CSS order properties
- convex/http.ts: hreflang and twitter:site in generateMetaHtml()
- netlify.toml: X-Robots-Tag headers for public, dashboard, API routes
- index.html: canonical, hreflang, twitter:site placeholder tags
- fork-config.json.example: twitter configuration fields
Closes#4
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove /api/raw Netlify Function that caused build failures
- Comment out ChatGPT/Claude/Perplexity buttons in CopyPageDropdown
- Keep Copy page, View as Markdown, Download as SKILL.md options
- Update blog post with detailed log of attempted solutions
- Clean up netlify.toml by removing broken redirect rule
Users can still copy markdown and paste into AI tools manually.
The raw markdown files work in browsers but AI crawlers cannot
fetch them reliably due to Netlify edge function interception.
- Create netlify/functions/raw.ts Netlify Function
- Returns text/plain with minimal headers for reliable AI ingestion
- Reads from dist/raw/ (production) or public/raw/ (dev/preview)
- Update CopyPageDropdown to use /api/raw/:slug for AI services
- Keep /raw/:slug.md for View as Markdown browser viewing
- Add @netlify/functions dev dependency
- Remove Link header from global headers scope, apply only to /index.html
- Remove X-Robots-Tag noindex from /raw/* to allow AI crawler indexing
- Use window.location.origin instead of props.url for raw markdown URL construction
- Ensures correct URLs even when props.url points to canonical/deploy preview domains
- Fixes ChatGPT/Perplexity fetch failures on /raw/*.md endpoints
Featured Section
- Frontmatter-controlled featured items with featured: true and featuredOrder
- Card view with excerpts and list/card toggle button
- View preference saved to localStorage
- New Convex queries for featured posts and pages with by_featured index
Logo Gallery
- Continuous marquee scroll with clickable logos
- CSS animation, grayscale with color on hover
- Configurable speed, position, and title
- 5 sample logos included
Firecrawl Content Importer
- npm run import <url> scrapes external URLs to markdown drafts
- Creates local files in content/blog/ with frontmatter
- Then sync to dev or prod (no separate import:prod command)
API Enhancements
- New /api/export endpoint for batch content fetching
- AI plugin discovery at /.well-known/ai-plugin.json
- OpenAPI 3.0 spec at /openapi.yaml
- Enhanced llms.txt documentation
Documentation
- AGENTS.md with codebase instructions for AI agents
- Updated all sync vs deploy tables to include import workflow
- Renamed content/pages/changelog.md to changelog-page.md
Technical
- New components: FeaturedCards.tsx, LogoMarquee.tsx
- New script: scripts/import-url.ts
- New dependency: @mendable/firecrawl-js
- Schema updates with featured, featuredOrder, excerpt fields
Update version to 1.0.0 across package.json and changelog. Configure netlify.toml with Convex deployment URL (agreeable-trout-200.convex.site). Verify TypeScript type-safety for src and convex directories. Confirm Netlify build passes with SPA 404 fallback configured. Update TASK.md with deployment steps and files.md with complete file structure.