Quick verification guide to ensure all SEO improvements are working correctly.
# Check all SEO files exist
ls -la layouts/partials/seo_meta.html
ls -la layouts/partials/structured_data.html
ls -la layouts/partials/head_custom.html
ls -la static/robots.txt
ls -la SEO_IMPROVEMENTS.md
ls -la SEO_KEYWORDS_REFERENCE.mdExpected output: All files should exist (no "No such file" errors)
# Navigate to project root
cd /Users/tommytang/githup_repo/DivingIntoGeneticsAndGenomics
# Start Hugo server
hugo server -D
# Should see: "Web Server is available at http://localhost:1313/"Open browser to: http://localhost:1313
Check Homepage:
- View source (Ctrl+U or Cmd+Option+U)
- Search for
<meta name="description"- should exist - Search for
<script type="application/ld+json">- should exist (Organization schema) - Search for
@type.*Organization- should exist
Check a Blog Post:
- Open any post:
http://localhost:1313/post/[any-post]/ - View source
- Search for
<meta name="description"- should exist with post summary - Search for
@type.*TechArticle- should exist - Search for
@type.*BreadcrumbList- should exist - Search for
og:description- should exist
Check robots.txt:
- Visit:
http://localhost:1313/robots.txt - Should see content starting with "User-agent: *"
- Should see "Sitemap: https://divingintogeneticsandgenomics.com/sitemap.xml"
Check sitemap.xml:
- Visit:
http://localhost:1313/sitemap.xml - Should see XML with
<urlset>tags - Should list blog posts, publications, talks
git status
# Expected output:
# modified: config.toml
# new file: layouts/partials/head_custom.html
# new file: layouts/partials/seo_meta.html
# new file: layouts/partials/structured_data.html
# new file: static/robots.txt
# new file: SEO_IMPROVEMENTS.md
# new file: SEO_KEYWORDS_REFERENCE.md
# new file: SEO_DEPLOYMENT_CHECKLIST.mdgit diff config.toml
# Should show:
# + enableGitInfo = true
# + enableRobotsTXT = true
# + description = "Learn bioinformatics..."
# + [sitemap]
# + series = "series"git add layouts/partials/seo_meta.html
git add layouts/partials/structured_data.html
git add layouts/partials/head_custom.html
git add static/robots.txt
git add config.toml
git add SEO_IMPROVEMENTS.md
git add SEO_KEYWORDS_REFERENCE.md
git add SEO_DEPLOYMENT_CHECKLIST.md
git commit -m "Add comprehensive SEO improvements
- Add auto-generated meta descriptions for all posts
- Add TechArticle structured data for technical content
- Add BreadcrumbList schema for better navigation
- Add Organization schema for homepage
- Add enhanced Open Graph and Twitter Card meta tags
- Add robots.txt for efficient search engine crawling
- Enable sitemap generation with weekly update frequency
- Enable Git-based lastmod dates for content freshness
- Add site-wide description with primary keywords
- Add series taxonomy for tutorial organization
- Create SEO documentation and keyword reference guides
All improvements work with existing content without requiring
.Rmd re-rendering. Meta descriptions auto-generate from post
summaries, ensuring all 231 posts benefit immediately."
git push origin master# Netlify will automatically:
# 1. Detect the push
# 2. Run: hugo
# 3. Deploy public/ directory
# Check Netlify dashboard:
# https://app.netlify.com/sites/[your-site-name]/deploys
# Wait for "Published" status (usually 1-2 minutes)curl https://divingintogeneticsandgenomics.com/robots.txt
# Expected output:
# User-agent: *
# Allow: /
# Sitemap: https://divingintogeneticsandgenomics.com/sitemap.xml
# Disallow: /rmarkdown-libs/
# ...✅ Pass: robots.txt content displays correctly ❌ Fail: 404 error or incorrect content → Check static/robots.txt exists and redeploy
curl https://divingintogeneticsandgenomics.com/sitemap.xml | head -50
# Expected: XML starting with <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
# Should list URLs like:
# <loc>https://divingintogeneticsandgenomics.com/post/...</loc>✅ Pass: Sitemap XML with URLs ❌ Fail: 404 or empty → Check config.toml sitemap section
curl -s https://divingintogeneticsandgenomics.com/ | grep -A 1 'meta name="description"'
# Expected:
# <meta name="description" content="Learn bioinformatics, genomics...">✅ Pass: Description tag with site description ❌ Fail: No output → Check if head_custom.html is being loaded
Pick any recent post URL and test:
# Replace [POST-URL] with actual post slug
curl -s https://divingintogeneticsandgenomics.com/post/[POST-URL]/ | grep '@type'
# Expected output includes:
# "@type": "TechArticle"
# "@type": "BreadcrumbList"
# "@type": "Person"✅ Pass: Multiple @type entries found ❌ Fail: No output → Check structured_data.html partial
Visit:
https://cards-dev.twitter.com/validator
Enter: https://divingintogeneticsandgenomics.com/post/[any-post]/
✅ Pass: Card preview shows title, description, image ❌ Fail: Generic card → Check Open Graph meta tags
URL: https://search.google.com/test/rich-results
Test: Enter any blog post URL
Expected Results:
- ✅ "Page is eligible for rich results"
- ✅ "TechArticle" detected
- ✅ "BreadcrumbList" detected
- ✅ No errors
If errors occur:
- Check for missing required fields (headline, datePublished, image)
- Verify image URL is absolute (includes https://)
- Check date format is ISO 8601 (YYYY-MM-DD)
URL: https://validator.schema.org/
Test: Paste HTML source of a blog post
Expected Results:
- ✅ TechArticle schema detected
- ✅ All required properties present
- ✅ No warnings
URL: https://developers.facebook.com/tools/debug/
Test: Enter blog post URL
Expected Results:
- ✅ og:title displays correctly
- ✅ og:description shows post summary
- ✅ og:image shows (default icon or custom image)
URL: https://www.linkedin.com/post-inspector/
Test: Enter blog post URL
Expected Results:
- ✅ Title, description, image all display
- ✅ No errors
- Go to: https://search.google.com/search-console
- Add property:
https://divingintogeneticsandgenomics.com - Verify via:
- Recommended: HTML tag (add to head_custom.html)
- Alternative: DNS record
- Alternative: Google Analytics
- In Search Console, go to: Sitemaps (left sidebar)
- Enter:
sitemap.xml - Click "Submit"
- Status should show: "Success" (may take 24-48 hours)
- Go to: URL Inspection (left sidebar)
- Enter URLs of top 10 blog posts
- Click "Request Indexing" for each
- This speeds up discovery of SEO improvements
- Check Search Console for crawl errors
- Verify sitemap was processed (Coverage report)
- Check if structured data is detected (Enhancements report)
- Monitor any errors in Rich Results report
Check in Google Search Console:
-
Performance Report
- Total clicks (should stay same or increase)
- Total impressions (should increase 10-20%)
- Average CTR (should increase 0.5-1%)
- Average position (may fluctuate initially)
-
Coverage Report
- Valid pages indexed (should be 250+)
- Excluded pages (should be *_files, *_cache)
- No errors
-
Enhancements Report
- Check if structured data is detected
- No errors in Article markup
- No errors in Breadcrumb markup
Expected Improvements:
| Metric | Baseline | Target | Actual |
|---|---|---|---|
| Organic Traffic | [current] | +30-40% | _____ |
| Average CTR | [current] | +1-2% | _____ |
| Impressions | [current] | +50% | _____ |
| Featured Snippets | 0-5 | 10-15 | _____ |
| Avg Position | [current] | -5 to -10 | _____ |
Symptoms: Google search results show "..." instead of description
Causes:
- Google is still using cached version (takes 1-2 weeks to update)
- Google chose to rewrite description (this is normal, happens 30% of time)
Solution:
- Wait 2 weeks for re-crawl
- Use Search Console "Request Indexing" to speed up
- If persists, description might be too short/long (aim for 150-160 chars)
Symptoms: "Unparseable structured data" errors
Causes:
- Invalid JSON-LD syntax
- Missing required fields
- Wrong date format
Solution:
# Test locally first
curl -s http://localhost:1313/post/[post-slug]/ | grep -A 50 '@type.*TechArticle'
# Validate JSON at https://jsonlint.com/
# Check required fields: headline, datePublished, author, imageSymptoms: sitemap.xml is empty or shows very few URLs
Causes:
- Hugo didn't regenerate sitemap
- Posts are in draft mode
- permalinks are broken
Solution:
# Check for draft posts
grep -r "draft: true" content/post/
# Regenerate site
hugo --gc --minify
# Check public/sitemap.xml
cat public/sitemap.xml | grep -c "<loc>"
# Should show 250+ URLsSymptoms: https://divingintogeneticsandgenomics.com/robots.txt shows 404
Causes:
- File not in static/ directory
- Netlify build didn't copy it
- Hugo config not enabling it
Solution:
# Verify file exists locally
ls -la static/robots.txt
# Verify config has:
grep "enableRobotsTXT" config.toml
# Should show: enableRobotsTXT = true
# Redeploy
git push origin master-
Technical
- robots.txt accessible at /robots.txt
- sitemap.xml accessible at /sitemap.xml with 250+ URLs
- Meta descriptions appear in page source
- Structured data validates with no errors
- Open Graph tags present on all pages
-
Search Console (within 1 week)
- Sitemap submitted and processed
- No critical crawl errors
- Structured data detected (Enhancements report)
- Coverage shows 250+ valid pages
-
SEO Tools
- Rich Results Test shows "Eligible for rich results"
- Schema validator shows no errors
- Social media cards display correctly
-
Early Metrics (Month 1)
- Impressions increase 10-20%
- CTR stable or increases
- No drop in rankings
- At least 1-2 featured snippets captured
- Check this checklist - most issues are covered here
- Review SEO_IMPROVEMENTS.md - detailed troubleshooting section
- Test locally first - always verify with
hugo serverbefore deploying - Check Netlify build logs - look for Hugo errors during build
- Validate HTML - use https://validator.w3.org/
# SEO partials (Hugo templates)
layouts/partials/seo_meta.html
layouts/partials/structured_data.html
layouts/partials/head_custom.html
# Config and robots
config.toml (lines 34-47, 57-58, 323)
static/robots.txt
# Generated output (after hugo build)
public/robots.txt
public/sitemap.xml
public/index.html (check <head> section)
public/post/*/index.html (check <head> section)If all pre-deployment checks pass, you're ready to:
git add -A
git commit -m "Add comprehensive SEO improvements"
git push origin masterThen complete the post-deployment verification above.
Estimated time: 15-20 minutes total
- 5 min: Commit and push
- 2 min: Netlify build
- 10 min: Verification checks
- 3 min: Google Search Console setup
Last Updated: January 2025 Status: Ready for deployment No .Rmd files modified: ✅ Safe to deploy without re-rendering