https://github.com/capjamesg/seotools
A set of utilities for SEOs and web developers with which to complete common tasks.
https://github.com/capjamesg/seotools
link-graph seo seo-optimization
Last synced: 8 months ago
JSON representation
A set of utilities for SEOs and web developers with which to complete common tasks.
- Host: GitHub
- URL: https://github.com/capjamesg/seotools
- Owner: capjamesg
- License: mit
- Created: 2023-08-03T19:32:55.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-08-07T10:24:40.000Z (over 2 years ago)
- Last Synced: 2025-05-07T20:46:40.117Z (8 months ago)
- Topics: link-graph, seo, seo-optimization
- Language: Python
- Homepage: https://capjamesg.github.io/SEOtools/
- Size: 1.48 MB
- Stars: 8
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://badge.fury.io/py/seotools)
[](https://pypistats.org/packages/seotools)
[](https://github.com/capjamesg/seotools/blob/main/LICENSE)
[](https://badge.fury.io/py/mf2py)
# SEOtools 🛠️
A set of utilities for SEOs and web developers with which to complete common tasks.
With SEOtools, you can:
1. Programatically add links to related posts in content.
2. Calculate PageRank on internal links from your sitemap.
3. Identify broken links on a web page.
4. Recommend a post to use as canonical for a given keyword.
5. Find the distance of pages from your home page.
And more!
## Installation 💻
You can install SEOtools using pip:
```bash
pip install seotools
```
## Quickstart 🚀
### Create a link graph
```python
from seotools.app import Analyzer
# load from disk will load the link graph from disk if it has already been created
# otherwise, a new link graph will be created
analyzer = Analyzer("https://jamesg.blog/sitemap.xml", load_from_disk=True)
```
### Get pagerank of a URL
```python
print(analyzer.pagerank["https://jamesg.blog"])
```
### Add relevant internal links to a web page
```python
import markdown
article = markdown.markdown(BeautifulSoup(article.text, "html.parser").get_text())
keyword_replace_count = 0
for keyword, url in keyword_map.items():
if keyword_replace_count >= MAX_KEYWORD_REPLACE:
break
article = article.replace(keyword, f"{keyword}", 1)
keyword_replace_count += 1
print(article)
```
### Recommend related content for a "See Also" section
```python
article = requests.get("https://jamesg.blog/...")
article = markdown.markdown(BeautifulSoup(article.text, "html.parser").get_text())
urls = analyzer.recommend_related_content(article.text)
```
### Check if a page contains a particular JSON-LD object
```python
from seotools import page_contains_jsonld
import requests
content = requests.get("https://jamesg.blog")
print(page_contains_jsonld(content, "FAQPage"))
```
### Get subfolders in a sitemap
```python
analyzer.get_subpaths()
```
### Get distance of URL from home page
```python
analyzer.get_distance_from_home_page("https://jamesg.blog/2023/01/01/")
```
### Retrieve keywords that appear more than N times on a web page
```python
from seotools import get_keywords
import requests
from bs4 import BeautifulSoup
article = requests.get("https://jamesg.blog/...").text
parsed_article = BeautifulSoup(article, "html.parser").get_text()
# get keywords that appear more than 10 times
keywords = get_keywords(parsed_article, 10)
```
## See Also 📚
- [getsitemap](https://github.com/capjamesg/getsitemap): Retrieve URLs in a sitemap. ([Web interface](https://getsitemapurls.com))
## License 📝
This project is licensed under an [MIT license](https://github.com/capjamesg/SEOtools/blob/main/LICENSE).