Search engines love mlsystems.dev because every page is pure static HTML with no client-side rendering tax. Here's what's already wired in, and what to do before launch.
- ✅ Per-page
<title>and<meta description>— populated from frontmatter - ✅ Open Graph + Twitter cards on every page
- ✅ Canonical URLs — prevents duplicate-content penalties
- ✅ JSON-LD structured data on article pages — helps Google Rich Results
- ✅ Auto-generated
/sitemap-index.xmlvia@astrojs/sitemap - ✅ Static
/robots.txtatpublic/robots.txt - ✅ RSS feed at
/rss.xmlfor readers and newsletter pipelines - ✅ Semantic HTML — proper heading hierarchy,
<article>,<nav>,<main> - ✅ Pure static HTML on every page — best possible crawlability
- ✅ Self-hosted Google Fonts via
preconnect - ✅ Trailing slash policy set to
ignorefor clean URLs
Before publicly launching, work through these:
Set real values for:
url: 'https://mlsystems.dev', // your live URL
description: 'Your real description', // 150-160 chars, used in meta + OG
twitter: '@yourhandle', // or null if you don't have one yet
github: 'https://github.com/MLSysDev',
pitchEmail: 'real@email.address',Drop a 1200×630 PNG at public/og-default.png. This is what shows on Twitter, LinkedIn, Slack, Discord, etc. when someone shares your homepage.
Per-post OG images are auto-generated from the post's frontmatter.
- Google Search Console — claim the domain via DNS TXT record or HTML file
- Bing Webmaster Tools — same idea, smaller traffic share but still worth it
In Search Console: Sitemaps → Add a new sitemap → sitemap-index.xml.
Bing Webmaster Tools has the same flow.
Recommended: Plausible or Umami — privacy-friendly, lightweight, no cookie banners needed. Avoid Google Analytics (slow, requires cookie consent, ML/dev audiences increasingly block it).
Drop the analytics script into BaseLayout.astro.
Open public/robots.txt and confirm:
User-agent: *
Allow: /
Sitemap: https://mlsystems.dev/sitemap-index.xml
If you want to block AI crawlers (e.g., GPTBot, ClaudeBot, CCBot), add Disallow rules here. This is a personal/editorial choice.
Run PageSpeed Insights against your live site. Aim for 95+ on every metric. The current build should easily hit it.
- Title: include the key term in the first 60 chars
- Summary: 150-160 chars, descriptive, includes the key term
- First paragraph: state what the post covers and who it's for
- Headings: use them, hierarchically (H2 → H3), and include keywords naturally
- Internal links: link related posts in your sentences, not just at the bottom
- External citations: link papers, repos, and prior art — Google rewards real references
- Don't add heavy JS libraries to
.astropages - Keep images optimized (Astro's image integration handles this automatically when you
importimages) - Use
client:visiblefor islands so they hydrate lazily, not on page load
- No keyword stuffing
- No invisible text
- No misleading titles vs. content
- No clickbait that the post doesn't deliver on
Search engines have gotten good at detecting these. Don't bother.