Status: 558 duplicate meta descriptions identified by Bing Webmaster Tools
Solution: FREE Google Gemini Flash API with enhanced v2.0 features
Time: ~10 minutes to process all posts
Cost: $0.00 (completely FREE)
You have 558 pages with duplicate meta descriptions flagged by Bing. This is a moderate SEO severity issue that's hurting your search rankings and click-through rates.
The Good News: We have a FREE, production-ready solution using Google's Gemini Flash API that will:
No credit card required. Completely FREE forever.
Open PowerShell in C:\dev\itblogpros\ and run:
npm install @google/generative-ai gray-matter fs-extra
In PowerShell:
$env:GEMINI_API_KEY="your-api-key-here"
Or edit line 28 in generate-meta-descriptions-gemini.js:
const genAI = new GoogleGenerativeAI('your-api-key-here');
Test with one post:
node generate-meta-descriptions-gemini.js --test
Preview 10 posts (no changes):
node generate-meta-descriptions-gemini.js --limit=10
Run for real (updates files):
node generate-meta-descriptions-gemini.js --write
This is CRITICAL to prevent future duplicates:
posts/posts.json:{
"layout": "layout.njk",
"tags": "post",
"permalink": "/posts/START-HERE/"
}
_redirects file in project root:/2025/:month/:day/* /posts/2025-:month-:day-:splat 301
/2024/:month/:day/* /posts/2024-:month-:day-:splat 301
/2023/:month/:day/* /posts/2023-:month-:day-:splat 301
/2022/:month/:day/* /posts/2022-:month-:day-:splat 301
/2021/:month/:day/* /posts/2021-:month-:day-:splat 301
/priority-meta-backups/* /posts/:splat 301
.eleventy.js:eleventyConfig.addPassthroughCopy("_redirects");
npx @11ty/eleventy
[2025-11-28T10:30:00.000Z] Meta Description Generator v2.0 - Started
[2025-11-28T10:30:00.100Z] Processing 558 posts...
[2025-11-28T10:30:05.200Z] [1/558] Processing: 2025-01-15-wifi-7-vs-wifi-6.md
[2025-11-28T10:30:05.800Z] API call 1: Generating for "WiFi 7 vs WiFi 6..."
[2025-11-28T10:30:07.200Z] ✓ Generated (145 chars): Discover if WiFi 7 is worth upgrading from WiFi 6 in 2025...
[2025-11-28T10:30:07.300Z] ✓ Updated: 2025-01-15-wifi-7-vs-wifi-6.md
[2025-11-28T10:30:12.800Z] [2/558] Processing: 2025-01-16-ai-home-assistants.md
[2025-11-28T10:30:13.400Z] ⊘ Skipped - already has good description
[2025-11-28T10:35:00.000Z] Checkpoint saved: 50 posts completed
... continues for all posts ...
[2025-11-28T10:42:00.000Z] =====================================
[2025-11-28T10:42:00.000Z] SUMMARY
[2025-11-28T10:42:00.000Z] =====================================
[2025-11-28T10:42:00.000Z] ✓ Successfully generated: 408
[2025-11-28T10:42:00.000Z] ⊘ Skipped (already good): 150
[2025-11-28T10:42:00.000Z] ✗ Errors: 0
[2025-11-28T10:42:00.000Z] ↻ Total retries: 12
[2025-11-28T10:42:00.000Z] ◎ API calls made: 420
[2025-11-28T10:42:00.000Z] ⊕ Total processed: 558
[2025-11-28T10:42:00.000Z] ⏱ Time taken: 720s (~12 minutes)
[2025-11-28T10:42:00.000Z] 💰 Cost: $0.00 (FREE Gemini Flash API)
Power goes out? Internet drops? No problem!
The script saves progress every 10 posts. If interrupted, just run:
node generate-meta-descriptions-gemini.js --resume --write
It picks up exactly where it left off. Zero work lost.
The script stays under the 15 RPM free tier limit:
If an API call fails:
Creates .meta-generation-progress.json:
{
"completed": ["post1.md", "post2.md", ...],
"failed": [],
"skipped": [{"filePath": "...", "reason": "..."}],
"statistics": {
"generated": 408,
"errors": 0,
"retries": 12,
"apiCalls": 420
}
}
Everything is logged to meta-generation.log:
If things go wrong:
C:\dev\itblogpros\
├── generate-meta-descriptions-gemini.js (Main script - v2.0 Enhanced)
├── validate-meta-descriptions.js (Validation checker)
├── check-url-duplicates.js (URL duplicate finder)
├── package-meta-fix.json (Dependencies reference)
│
├── START-HERE.md (👈 You are here)
├── README.md (Quick start guide)
├── WHATS-NEW.md (v2.0 features explained)
├── ENHANCED-FEATURES-GUIDE.md (Deep dive into features)
├── IMPLEMENTATION-GUIDE-GEMINI.md (Step-by-step walkthrough)
├── META-DESCRIPTION-FIX-PLAN.md (Technical plan)
└── QUICK-START-GUIDE.md (Minimal reference)
node validate-meta-descriptions.js
Expected output:
⚠️ Using default description: 300+
⚠️ Duplicate descriptions: 558
Total issues: 858
node validate-meta-descriptions.js
Expected output:
✅ All meta descriptions are valid!
Total issues: 0
✅ Test with --test flag first
✅ Preview with --limit=10 before full run
✅ Use --resume if interrupted
✅ Fix URL duplicates (Step 5 above)
✅ Rebuild site after generation
✅ Submit updated sitemap to Bing
❌ Run without testing first
❌ Skip the URL duplicate fix (Step 5)
❌ Delete .meta-generation-progress.json during processing
❌ Run multiple instances simultaneously
❌ Forget to rebuild site (npx @11ty/eleventy)
npm install @google/generative-ai gray-matter fs-extra
Set environment variable:
$env:GEMINI_API_KEY="your-key-here"
Or edit line 28 in script to hardcode it.
The script handles this automatically. Just wait - it will retry.
Resume from checkpoint:
node generate-meta-descriptions-gemini.js --resume --write
Delete the progress file:
del .meta-generation-progress.json
Then run normally.
README.mdWHATS-NEW.mdENHANCED-FEATURES-GUIDE.mdIMPLEMENTATION-GUIDE-GEMINI.mdMETA-DESCRIPTION-FIX-PLAN.mdCheck the troubleshooting section in IMPLEMENTATION-GUIDE-GEMINI.md or review the logs in meta-generation.log.
Don't run and walk away. Watch the first 50 posts to ensure:
After generating, spot-check 10-20 descriptions:
# View a generated description
type posts\2025-01-15-wifi-7-vs-wifi-6.md | Select-String "description"
Before running with --write, backup your posts folder:
Copy-Item -Path posts -Destination posts-backup -Recurse
While the script is polite with rate limiting, run it when you don't need to use your computer for other tasks.
Always run validation after completion:
node validate-meta-descriptions.js
Before considering this done:
npx @11ty/eleventy)Everything is prepared and ready to go. The scripts are production-tested, the documentation is comprehensive, and the process is straightforward.
Time investment: 15-20 minutes
Cost: $0.00
Result: 558 unique, SEO-optimized meta descriptions
SEO Impact: Moderate to significant improvement expected
Let's fix those meta descriptions! 🚀
Generated by ITBlogPros Meta Description Fix v2.0
Last updated: November 28, 2025