Get started with ContentSwift's professional SEO analysis tools in 5 minutes!
# 1. Install dependencies
cd backend-crt/src
pip install -r requirements.txt
# 2. Download required models
python -m spacy download en_core_web_sm
python -c "import nltk; nltk.download('punkt'); nltk.download('stopwords')"
# 3. Start the server
cd ../..
cd backend-crt && docker-compose up -d --buildcurl -X POST http://localhost:8000/seo/analyze-page \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'What you get:
- ✅ Meta tags analysis (title, description)
- ✅ Heading structure (H1-H6)
- ✅ Readability scores
- ✅ Link analysis (internal/external)
- ✅ Image SEO (alt tags)
- ✅ Technical SEO metrics
curl -X POST http://localhost:8000/seo/keyword-density \
-H "Content-Type: application/json" \
-d '{
"text": "Your article content here...",
"keywords": ["SEO", "content marketing"]
}'What you get:
- ✅ Keyword count and density percentage
- ✅ Optimization recommendations
- ✅ Keyword stuffing detection
curl -X POST http://localhost:8000/seo/generate-meta-description \
-H "Content-Type: application/json" \
-d '{
"text": "Your long article content...",
"max_length": 155
}'What you get:
- ✅ AI-generated meta description
- ✅ Optimal length (120-160 chars)
- ✅ Natural language summary
curl -X POST http://localhost:8000/seo/competitor-analysis \
-H "Content-Type: application/json" \
-d '{
"competitor_urls": [
"https://competitor1.com",
"https://competitor2.com"
]
}'What you get:
- ✅ Common keywords across competitors
- ✅ TF-IDF scores
- ✅ Keyword gap opportunities
curl -X POST http://localhost:8000/seo/extract-keywords \
-H "Content-Type: application/json" \
-d '{
"documents": [
"Your content 1...",
"Your content 2..."
],
"max_features": 20
}'What you get:
- ✅ Top keywords by TF-IDF
- ✅ Unigrams, bigrams, trigrams
- ✅ Importance scores
Optimize a blog post in 3 steps:
# Check current SEO status
curl -X POST http://localhost:8000/seo/analyze-page \
-H "Content-Type: application/json" \
-d '{"url": "https://yourblog.com/post"}' \
> analysis.json# Verify keyword density
curl -X POST http://localhost:8000/seo/keyword-density \
-H "Content-Type: application/json" \
-d '{
"text": "...",
"keywords": ["your", "target", "keywords"]
}' > keywords.json# Create SEO-friendly meta description
curl -X POST http://localhost:8000/seo/generate-meta-description \
-H "Content-Type: application/json" \
-d '{"text": "..."}' > meta.jsoncurl http://localhost:8000/seo/robots-txt/example.comcurl -X POST http://localhost:8000/seo/analyze-sitemap \
-H "Content-Type: application/json" \
-d '{"sitemap_url": "https://example.com/sitemap.xml"}'curl -X POST http://localhost:8000/seo/extract-ngrams \
-H "Content-Type: application/json" \
-d '{
"text": "Your content...",
"n": 2,
"top_n": 20
}'curl -X POST http://localhost:8000/seo/cluster-keywords \
-H "Content-Type: application/json" \
-d '{
"keywords": ["keyword1", "keyword2", "keyword3"],
"n_clusters": 3
}'- Optimal Title: 30-60 characters
- Optimal Description: 120-160 characters
- H1 Count: Should be exactly 1
- 0-1%: Too low, increase usage
- 1-3%: ✅ Optimal range
- 3-5%: Too high, risk of keyword stuffing
- 5%+:
⚠️ Keyword stuffing detected
- Flesch Reading Ease:
- 90-100: Very Easy (5th grade)
- 60-70: Standard (8th-9th grade) ✅ Target
- 0-30: Very Difficult (College+)
- Internal Links: 2-5 per page recommended
- External Links: Relevant, authoritative sources
- Nofollow: Use for untrusted/paid links
Analyze multiple URLs at once:
curl -X POST http://localhost:8000/seo/batch-analyze \
-H "Content-Type: application/json" \
-d '{
"urls": ["url1", "url2", "url3"]
}'import requests
# Analyze page
response = requests.post(
'http://localhost:8000/seo/analyze-page',
json={'url': 'https://example.com'}
)
result = response.json()
print(f"Title: {result['data']['meta_tags']['title']['content']}")
print(f"Word Count: {result['data']['content_stats']['word_count']}")Create a script to audit all your pages:
#!/bin/bash
for url in $(cat urls.txt); do
curl -X POST http://localhost:8000/seo/analyze-page \
-H "Content-Type: application/json" \
-d "{\"url\": \"$url\"}" \
> "results/$(echo $url | md5sum | cut -d' ' -f1).json"
doneimport nltk
nltk.download('all')python -m spacy download en_core_web_sm- Increase timeout in your requests
- Check if the URL is accessible
- Verify firewall settings
- Reduce batch size
- Process URLs sequentially
- Increase Docker memory limit
- Read Full Documentation:
/SEO_TOOLKIT_GUIDE.md - Try Examples:
python backend-crt/src/seo_examples.py - Check API Docs:
http://localhost:8000/docs(FastAPI auto-docs) - Join Community: Report issues on GitHub
| Operation | Time | Memory |
|---|---|---|
| Page Analysis | 2-5s | ~100MB |
| Keyword Density | <1s | ~50MB |
| Meta Generation | 1-2s | ~100MB |
| Competitor Analysis | 3-10s | ~200MB |
| Batch (10 URLs) | 20-50s | ~500MB |
Need Help? Check /SEO_TOOLKIT_GUIDE.md for comprehensive documentation!
Happy Optimizing! 🚀