-
Notifications
You must be signed in to change notification settings - Fork 0
Description
SEO Optimization: Essential Features for Better Search Visibility
Overview
This issue outlines critical SEO improvements needed to enhance the website's search engine visibility and user engagement. The current implementation lacks essential SEO infrastructure that prevents optimal indexing and discovery.
Current SEO Status
✅ What We're Doing Well
- Clean URLs (no .html extensions)
- Fast loading (Vite optimization)
- Mobile responsive design
- Semantic HTML structure
- Analytics (Umami) already integrated
- Regular publishing with dates
- Rich content (interactive posts, NFTs)
❌ Critical Missing Features
- Meta descriptions for individual pages
- Tags/categories system
- SEO-friendly URL slugs
- Schema.org structured data
- XML sitemap generation
- Related posts functionality
Priority 1: Essential SEO Infrastructure
1. Meta Tags & Open Graph Support
Problem: Poor search result snippets, no social media previews
Impact: Low click-through rates from search results
Implementation:
// Update BlogPost interface
export interface BlogPost {
title: string;
content: string;
description?: string; // Meta description (150-160 chars)
keywords?: string[]; // SEO keywords
tags?: string[]; // Content tags
category?: string; // Primary category
slug?: string; // URL-friendly slug
featured_image?: string; // Social media image
}Files to modify:
types/BlogPost.tsutils/getBlogs.ts(frontmatter parsing)- Individual blog pages (meta tag generation)
2. Dynamic Page Titles & Descriptions
Problem: Generic titles, missing descriptions
Current: All pages use default title/description
Implementation:
// Better individual blog page SEO
export function title(pageContext: PageContext) {
const blog = blogs[id];
return `${blog.title} | Fred's Blog`;
}
export function description(pageContext: PageContext) {
const blog = blogs[id];
return blog.description || extractDescription(blog.content);
}Files to modify:
pages/blog/@id/+title.ts- Create
pages/blog/@id/+description.ts - Add utility function for content description extraction
Priority 2: Content Organization
3. Tags & Categories System
Problem: No topical clustering, poor internal linking
Impact: Missed long-tail keywords, poor content discoverability
Markdown frontmatter example:
---
title: "Can we decentralize access to quantum computing?"
description: "Exploring how smart contracts could democratize quantum computing access through decentralized technologies"
tags: ["quantum-computing", "blockchain", "decentralization", "smart-contracts"]
category: "technology"
publishing_date: 2025-10-02
tokenID: 123
---Implementation needs:
- Update frontmatter parsing in
utils/getBlogs.ts - Create tag/category listing pages
- Add tag filtering functionality
- Tag-based related posts
4. SEO-Friendly URL Slugs
Problem: Numeric IDs in URLs
Current: /blog/0, /blog/1, /blog/2
Target: /blog/quantum-computing-smart-contracts
Implementation:
function generateSlug(title: string): string {
return title
.toLowerCase()
.replace(/[^a-z0-9\s-]/g, '')
.replace(/\s+/g, '-')
.substring(0, 60);
}Files to modify:
- Update routing in
pages/blog/@slug/+Page.tsx - Update blog listing to use slugs
- Add slug generation to blog processing
- Handle URL redirects for existing numeric URLs
Priority 3: Rich Content Features
5. Schema.org Structured Data
Problem: No structured data for search engines
Impact: Missed rich snippets, poor search result appearance
Implementation:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Can we decentralize access to quantum computing?",
"author": {"@type": "Person", "name": "Fred Jendrzejewski"},
"datePublished": "2025-10-02",
"description": "Exploring how smart contracts...",
"keywords": ["quantum computing", "blockchain"],
"url": "https://fretchen.github.io/blog/quantum-computing-smart-contracts"
}
</script>Files to modify:
- Create structured data component
- Add to individual blog pages
- Include author information
- Add organization schema for homepage
6. XML Sitemap Generation
Problem: No sitemap for search engine crawling
Implementation: Generate dynamic sitemap including all blog posts and pages
Files to create:
public/sitemap.xml(generated)- Build script for sitemap generation
- Include in
robots.txt
Priority 4: User Engagement
7. Related Posts Functionality
Problem: Poor internal linking
Implementation:
function getRelatedPosts(currentPost: BlogPost): BlogPost[] {
return blogs.filter(blog =>
blog.tags?.some(tag => currentPost.tags?.includes(tag))
).slice(0, 3);
}8. Consistent Commenting System
Current: Giscus comments only on some posts
Target: Consistent commenting across all posts with engagement metrics
Implementation Tasks
Task 1: Basic Meta Infrastructure
- Add
descriptionfield toBlogPostinterface - Update frontmatter parsing for descriptions
- Add content description extraction utility
- Implement dynamic page descriptions
Task 2: Tags System
- Add
tagsandcategoryfields toBlogPostinterface - Update frontmatter parsing for tags
-
Create tag listing functionality - Add tags display to blog cards
Task 3: URL Slugs
Task 4: Structured Data
- Create Schema.org component for blog posts
- Add structured data to individual pages
- Implement organization schema for homepage
- Test with Google Rich Results Test
Task 5: Sitemap & Navigation
-
Generate XML sitemap - Update robots.txt
- Implement related posts functionality
-
Add breadcrumb navigation
Task 6: Optimization & Testing
- Improve internal linking
- Test all SEO implementations
- Validate structured data
- Performance optimization
Success Metrics
SEO Improvements
- All blog posts have unique meta descriptions
- Structured data validates in Google Search Console
- XML sitemap generated and submitted
- URL structure uses descriptive slugs
User Experience
- Related posts increase page views
- Tags enable content discovery
- Consistent commenting across all posts
- Improved social media sharing
Files That Need Changes
Core Infrastructure
types/BlogPost.ts- Add SEO fieldsutils/getBlogs.ts- Parse new frontmatter fieldspages/+config.ts- Default SEO configuration
Blog System
pages/blog/@id/+Page.tsx- Dynamic SEO tagspages/blog/@id/+title.ts- Improved titlespages/blog/@id/+description.ts- New file for descriptionscomponents/EntryList.tsx- Display tags and categories
New Components
components/SEOHead.tsx- Meta tags componentcomponents/StructuredData.tsx- Schema.org markupcomponents/RelatedPosts.tsx- Related contentcomponents/TagList.tsx- Tag display and navigation
Technical Notes
Slug Migration Strategy
- Generate slugs for existing posts based on titles
- Maintain backward compatibility with numeric IDs
- Implement 301 redirects from old URLs to new slugs
Content Description Extraction
function extractDescription(content: string, maxLength = 160): string {
// Remove markdown formatting
const plainText = content.replace(/[#*`]/g, '').trim();
// Take first paragraph or first N characters
const firstParagraph = plainText.split('\n\n')[0];
return firstParagraph.length > maxLength
? firstParagraph.substring(0, maxLength - 3) + '...'
: firstParagraph;
}Tag System Implementation
- Support hierarchical categories (e.g., "technology > quantum-computing")
- Generate tag clouds for popular topics
- Create tag-based RSS feeds
- Implement tag-based search functionality
Expected Impact
Search Engine Optimization
- Meta descriptions: +15-25% CTR improvement
- URL slugs: Better keyword targeting and user trust
- Structured data: Rich snippets and improved SERP appearance
- Tags/categories: Better topical authority and long-tail ranking
User Experience
- Related posts: +20-30% page views per session
- Tag navigation: Improved content discovery
- Better URLs: Increased social sharing and bookmarking
Performance Metrics
- Improved Google PageSpeed Insights SEO score
- Better Core Web Vitals (through optimized meta loading)
- Increased organic search traffic
- Higher engagement metrics (time on site, pages per session)