Refactor SEO automation into unified CLI application
Major refactoring to create a clean, integrated CLI application: ### New Features: - Unified CLI executable (./seo) with simple command structure - All commands accept optional CSV file arguments - Auto-detection of latest files when no arguments provided - Simplified output directory structure (output/ instead of output/reports/) - Cleaner export filename format (all_posts_YYYY-MM-DD.csv) ### Commands: - export: Export all posts from WordPress sites - analyze [csv]: Analyze posts with AI (optional CSV input) - recategorize [csv]: Recategorize posts with AI - seo_check: Check SEO quality - categories: Manage categories across sites - approve [files]: Review and approve recommendations - full_pipeline: Run complete workflow - analytics, gaps, opportunities, report, status ### Changes: - Moved all scripts to scripts/ directory - Created config.yaml for configuration - Updated all scripts to use output/ directory - Deprecated old seo-cli.py in favor of new ./seo - Added AGENTS.md and CHANGELOG.md documentation - Consolidated README.md with updated usage ### Technical: - Added PyYAML dependency - Removed hardcoded configuration values - All scripts now properly integrated - Better error handling and user feedback Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
145
guides/QUICKSTART_ANALYZER.md
Normal file
145
guides/QUICKSTART_ANALYZER.md
Normal file
@@ -0,0 +1,145 @@
|
||||
# Quick Start: Multi-Site SEO Analyzer
|
||||
|
||||
## 30-Second Setup
|
||||
|
||||
### 1. Configure WordPress Access
|
||||
|
||||
Update `.env` with your 3 site credentials:
|
||||
|
||||
```bash
|
||||
WORDPRESS_MISTERGEEK_URL=https://www.mistergeek.net
|
||||
WORDPRESS_MISTERGEEK_USERNAME=your_username
|
||||
WORDPRESS_MISTERGEEK_PASSWORD=your_app_password
|
||||
|
||||
WORDPRESS_WEBSCROLL_URL=https://www.webscroll.fr
|
||||
WORDPRESS_WEBSCROLL_USERNAME=your_username
|
||||
WORDPRESS_WEBSCROLL_PASSWORD=your_app_password
|
||||
|
||||
WORDPRESS_HELLOGEEK_URL=https://www.hellogeek.net
|
||||
WORDPRESS_HELLOGEEK_USERNAME=your_username
|
||||
WORDPRESS_HELLOGEEK_PASSWORD=your_app_password
|
||||
```
|
||||
|
||||
### 2. Run Analyzer
|
||||
|
||||
```bash
|
||||
# With AI recommendations (recommended)
|
||||
python scripts/multi_site_seo_analyzer.py
|
||||
|
||||
# Without AI (faster, free)
|
||||
python scripts/multi_site_seo_analyzer.py --no-ai
|
||||
|
||||
# Custom AI posts (top 20)
|
||||
python scripts/multi_site_seo_analyzer.py --top-n 20
|
||||
```
|
||||
|
||||
### 3. Review Results
|
||||
|
||||
```bash
|
||||
# Markdown summary (human-friendly)
|
||||
open output/reports/seo_analysis_*_summary.md
|
||||
|
||||
# Detailed CSV (for importing to sheets)
|
||||
open output/reports/seo_analysis_*.csv
|
||||
```
|
||||
|
||||
## What Gets Analyzed
|
||||
|
||||
### Title (40% of score)
|
||||
- ✓ Length: 50-70 characters optimal
|
||||
- ✓ Power words: "best", "complete", "guide", etc.
|
||||
- ✓ Numbers: "2025", "Top 10", etc.
|
||||
- ✓ Readability: No weird special chars
|
||||
|
||||
### Meta Description (60% of score)
|
||||
- ✓ Present: Required for full score
|
||||
- ✓ Length: 120-160 characters optimal
|
||||
- ✓ Call-to-action: "learn", "discover", "find", etc.
|
||||
- ✓ Compelling: Not just keywords
|
||||
|
||||
## Cost
|
||||
|
||||
| Command | Cost | Time |
|
||||
|---------|------|------|
|
||||
| `--no-ai` | $0 | 2-3 min |
|
||||
| `-top-n 10` | ~$0.10 | 5-10 min |
|
||||
| `-top-n 20` | ~$0.50 | 10-15 min |
|
||||
| `-top-n 50` | ~$1.00 | 20-30 min |
|
||||
|
||||
## Understanding Output
|
||||
|
||||
### Score Ranges
|
||||
|
||||
| Score | Status | Action |
|
||||
|-------|--------|--------|
|
||||
| 0-25 | Critical | Fix immediately |
|
||||
| 25-50 | Poor | Optimize soon |
|
||||
| 50-75 | Fair | Improve when possible |
|
||||
| 75-90 | Good | Minor tweaks only |
|
||||
| 90-100 | Excellent | No changes needed |
|
||||
|
||||
### Priority Order
|
||||
|
||||
1. Posts with score < 50 (biggest impact)
|
||||
2. Posts with missing meta description (easy fix)
|
||||
3. Posts with weak titles (quick improvement)
|
||||
4. High-traffic posts with any issues (traffic × improvement)
|
||||
|
||||
## One-Liner to Get Started
|
||||
|
||||
If all 3 sites use the **same credentials**:
|
||||
|
||||
```bash
|
||||
# Just set primary site, others inherit
|
||||
WORDPRESS_URL=https://www.mistergeek.net \
|
||||
WORDPRESS_USERNAME=your_user \
|
||||
WORDPRESS_APP_PASSWORD=your_pass \
|
||||
OPENROUTER_API_KEY=your_key \
|
||||
python scripts/multi_site_seo_analyzer.py --no-ai
|
||||
```
|
||||
|
||||
## Common Commands
|
||||
|
||||
```bash
|
||||
# Published posts only (default)
|
||||
python scripts/multi_site_seo_analyzer.py
|
||||
|
||||
# Published + draft posts
|
||||
python scripts/multi_site_seo_analyzer.py --include-drafts
|
||||
|
||||
# Quick scan, no AI
|
||||
python scripts/multi_site_seo_analyzer.py --no-ai
|
||||
|
||||
# Drafts + AI recommendations
|
||||
python scripts/multi_site_seo_analyzer.py --include-drafts --top-n 10
|
||||
|
||||
# Analyze with recommendations for top 30
|
||||
python scripts/multi_site_seo_analyzer.py --top-n 30
|
||||
|
||||
# Save to custom location
|
||||
python scripts/multi_site_seo_analyzer.py --output my_report.csv
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**"No posts found"**
|
||||
- Check credentials in .env
|
||||
- Verify site is online
|
||||
- Try without auth: remove username/password from config
|
||||
|
||||
**"Connection refused"**
|
||||
- Verify site URLs (https, www)
|
||||
- Check if REST API is enabled
|
||||
- Try https://yoursite.com/wp-json/ in browser
|
||||
|
||||
**"No AI recommendations"**
|
||||
- Check OPENROUTER_API_KEY is set
|
||||
- Verify key has credits
|
||||
- Use --no-ai to test other features
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. Run: `python scripts/multi_site_seo_analyzer.py`
|
||||
2. Open: `output/reports/seo_analysis_*_summary.md`
|
||||
3. Implement: Top 5 recommendations per site
|
||||
4. Re-run: 30 days later to track improvement
|
||||
Reference in New Issue
Block a user