SEO Sentinel is a comprehensive automated SEO auditing tool that crawls websites, detects SEO issues, and generates detailed HTML reports for website optimization.
Project description
SEO Sentinel - Automated SEO Auditing Tool
A comprehensive SEO analysis tool that crawls websites, identifies SEO issues, and generates detailed HTML reports for website optimization.
[!CAUTION] SEO Sentinel is a helpful utility for SEO auditing but does not guarantee search engine ranking improvements. Please ensure your usage complies with the target site's policies. Always respect the
robots.txtfile of the websites you crawl. Use responsibly and ethically. The author is not responsible for any misuse or damage caused by the tool. Always test on your own sites or with permission from the site owner.
Features
- Website Crawling: Intelligent crawling with configurable depth and page limits
- SEO Analysis: Comprehensive analysis of metadata, links, and content
- Keyword Density: Track keyword usage and density across pages
- Broken Link Detection: Identify and report broken internal/external links
- Performance Metrics: Page load time and response code monitoring
- HTML Reports: Beautiful, detailed reports with actionable insights
- Auto Updates: Built-in update checker for latest features
- Configurable: Customizable crawling parameters and settings
Installation
Getting Started
Clone & Run Locally
# Clone the repository
git clone https://github.com/nayandas69/SEO-Sentinel
cd SEO-Sentinel
# Create a virtual environment
python3 -m venv venv
# Activate the environment
# Windows:
venv\Scripts\activate
# Linux/macOS:
source venv/bin/activate
# Install dependencies
pip3 install -r requirements.txt
# Run the project
python3 seose.py
Install via PyPI
pip3 install seo-sentinel
Then run via:
seo-sentinel
[!NOTE] Always make sure your internet connection is active while using SEO Sentinel for crawling and update checking.
[!IMPORTANT] Make sure your URLs include
http://orhttps://otherwise they will be rejected.
[!TIP] Generate reports regularly to monitor improvements after fixing SEO issues.
Programmatic Usage
from seose import SEOSentinel, SEOConfig
# Initialize with default config
sentinel = SEOSentinel()
# Or with custom configuration
config = SEOConfig(
crawl_depth=2,
max_pages=50,
request_timeout=15
)
sentinel = SEOSentinel(config)
# Crawl and analyze a website
urls = sentinel.crawl_website("https://example.com")
results = {}
for url in urls:
results[url] = sentinel.analyze_seo_issues(url, keywords=["seo", "optimization"])
# Generate HTML report
report_path = sentinel.generate_report(results, "https://example.com")
print(f"Report saved to: {report_path}")
Configuration
The SEOConfig class allows you to customize the analysis:
from seose import SEOConfig
config = SEOConfig(
report_directory="reports", # Directory for HTML reports
log_directory="logs", # Directory for log files
crawl_depth=3, # Maximum crawling depth
max_pages=100, # Maximum pages to crawl
request_timeout=10, # Request timeout in seconds
max_workers=5, # Concurrent workers (future use)
user_agent="SEO-Sentinel/1.0.2", # Custom user agent
verify_ssl=True # SSL certificate verification
)
Requirements
Runtime Dependencies
- Python 3.8+
- beautifulsoup4 >= 4.12.0
- requests >= 2.31.0
- tqdm >= 4.65.0
- jinja2 >= 3.1.0
Development Dependencies
- pytest >= 7.0.0
- black >= 23.0.0
- flake8 >= 6.0.0
- mypy >= 1.0.0
- coverage >= 7.0.0
Usage Examples
Basic Website Analysis
from seose import SEOSentinel
sentinel = SEOSentinel()
# Analyze a single page
issues = sentinel.analyze_seo_issues("https://example.com")
print(f"Found {len(issues.missing_metadata)} metadata issues")
# Full website crawl and analysis
urls = sentinel.crawl_website("https://example.com")
results = {url: sentinel.analyze_seo_issues(url) for url in urls}
report_path = sentinel.generate_report(results, "https://example.com")
Keyword Analysis
keywords = ["seo", "optimization", "website", "ranking"]
issues = sentinel.analyze_seo_issues("https://example.com", keywords=keywords)
for keyword, data in issues.keyword_density.items():
print(f"{keyword}: {data['count']} occurrences ({data['density']}%)")
Custom Configuration
from seose import SEOSentinel, SEOConfig
config = SEOConfig(
crawl_depth=2,
max_pages=25,
request_timeout=15
)
sentinel = SEOSentinel(config)
urls = sentinel.crawl_website("https://example.com", max_depth=1, max_pages=10)
Report Features
The generated HTML reports include:
- Executive Summary: Total pages, issues, and performance metrics
- Page-by-Page Analysis: Detailed breakdown of each crawled page
- Performance Indicators: Load times and response codes
- Broken Link Detection: Complete list of broken internal/external links
- Metadata Analysis: Missing or problematic meta tags, titles, descriptions
- Keyword Density: Frequency and density analysis for target keywords
Testing
Run the test suite:
# Run all tests
pytest
# Run with coverage
pytest --cov=seose
# Run specific test file
pytest tests/test_seose.py
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests (
pytest) - Format code (
black .) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Author
Nayan Das
- Website: https://linkinbio-nextjs-ashen.vercel.app
- Email: nayanchandradas@hotmail.com
- GitHub: @nayandas69
Support
- 🐛 Bug Reports: GitHub Issues
- 💬 Community: Discord Server
- 📧 Email: nayanchandradas@hotmail.com
Roadmap
- Multi-threading support for faster crawling
- Additional SEO checks (schema markup, social meta tags)
- JSON/CSV export options
- Web interface
- Integration with popular CMS platforms
- Advanced keyword analysis and suggestions
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file seo_sentinel-1.0.2.tar.gz.
File metadata
- Download URL: seo_sentinel-1.0.2.tar.gz
- Upload date:
- Size: 17.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
36c48d9ac008f8e301b47178d5612640e54131705468f9203265a70ca64e98b8
|
|
| MD5 |
595682ab90ff151c1a91115ea885c245
|
|
| BLAKE2b-256 |
c6f9b20a6419eb9e3dd56275b571e9fbc186bafed8d0922db2a126864caa268b
|
Provenance
The following attestation bundles were made for seo_sentinel-1.0.2.tar.gz:
Publisher:
publish.yml on nayandas69/SEO-Sentinel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
seo_sentinel-1.0.2.tar.gz -
Subject digest:
36c48d9ac008f8e301b47178d5612640e54131705468f9203265a70ca64e98b8 - Sigstore transparency entry: 495096879
- Sigstore integration time:
-
Permalink:
nayandas69/SEO-Sentinel@fa772491321a071704cffb71e5c825207655430b -
Branch / Tag:
refs/tags/1.0.2 - Owner: https://github.com/nayandas69
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@fa772491321a071704cffb71e5c825207655430b -
Trigger Event:
push
-
Statement type:
File details
Details for the file seo_sentinel-1.0.2-py3-none-any.whl.
File metadata
- Download URL: seo_sentinel-1.0.2-py3-none-any.whl
- Upload date:
- Size: 13.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0233ae77320113e92863c91cc2ef287fac25bfe3e1db6d04e3213e08bc4e519b
|
|
| MD5 |
1f5e5d3ae662b32ab2ba75734d21062d
|
|
| BLAKE2b-256 |
37ae30036dddf5fd19d23649591e1ab81634bf5f8713a7b071c81ccaf4cf80bf
|
Provenance
The following attestation bundles were made for seo_sentinel-1.0.2-py3-none-any.whl:
Publisher:
publish.yml on nayandas69/SEO-Sentinel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
seo_sentinel-1.0.2-py3-none-any.whl -
Subject digest:
0233ae77320113e92863c91cc2ef287fac25bfe3e1db6d04e3213e08bc4e519b - Sigstore transparency entry: 495096913
- Sigstore integration time:
-
Permalink:
nayandas69/SEO-Sentinel@fa772491321a071704cffb71e5c825207655430b -
Branch / Tag:
refs/tags/1.0.2 - Owner: https://github.com/nayandas69
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@fa772491321a071704cffb71e5c825207655430b -
Trigger Event:
push
-
Statement type: