When I started working on websites and web projects, I noticed something pretty simple.
A website can look completely fine in the browser and still have a lot of small SEO problems.
Maybe the page doesn't have a proper title. Maybe the meta description is missing. Some images don't have alt text. There are broken links. The H1 isn't meaningful. Social metadata or other technical SEO elements might be missing.
None of these problems are particularly difficult to fix, but checking them manually becomes annoying, especially when you're working on multiple pages.
That's what made me build Novash.
First, What Actually Matters for SEO?
Before talking about the tool, it's worth understanding what we're actually trying to check.
SEO isn't just about adding a few keywords to a webpage and hoping Google ranks it.
There are several things that contribute to a technically healthy page.
| What to Check | Why It Matters |
|---|---|
| Page title | Helps search engines and users understand what the page is about |
| Meta description | Can influence how the page is presented in search results |
| H1 heading | Gives the page a clear primary heading |
| Image alt text | Helps describe images and improves accessibility |
| Internal links | Helps users and crawlers navigate the website |
| Broken links | Can create a poor user experience |
| Canonical URL | Helps indicate the preferred version of a page |
| Robots.txt | Controls crawler access to parts of a site |
| Sitemap | Helps search engines discover URLs |
| Structured data | Can provide additional information about a page |
| Social metadata | Controls how pages appear when shared |
These checks don't guarantee that a page will rank highly.
Search rankings also depend on things like content quality, search intent, competition, backlinks, website performance, and many other factors.
But fixing technical problems is a good starting point.
So I Built Novash
Novash is an open-source command-line SEO checker written in Python.
Instead of opening a website and manually checking all these things, you can run a command in your terminal and get an SEO report.
You can install it directly from PyPI:
pip install novash
Then scan a website:
novash scan https://example.com
That's basically the idea.
Give Novash a URL, let it inspect the page, and it reports the problems it finds.
What Does Novash Check?
The project started with basic on-page SEO checks and has gradually grown into a larger collection of checks.
Some of the things it can look at include:
- Page title
- Meta description
- H1 headings
- Image alt text
- Links
- Broken links
- Canonical information
- Open Graph metadata
- Twitter metadata
- Robots.txt
- Sitemap
- Favicon
- Structured data
- SEO score
- Suggestions for fixing problems
I also wanted the output to be useful rather than just dumping a huge amount of HTML information into the terminal.
For example, instead of simply saying that an image doesn't have an alt attribute, the tool can turn that into an actionable suggestion.
SEO Score: 79/100
Suggestions
Add alt text to 17 images.
Fix 4 broken links.
Consider adding structured data.
So the goal isn't just to find problems.
It's to make the problems easier to understand and fix.
The Scoring System
Novash also calculates an SEO score out of 100.
The score starts at 100 and deductions are made when important SEO elements are missing or problematic.
For example:
| Problem | Example Impact |
|---|---|
| Missing title | -15 |
| Missing meta description | -15 |
| No meaningful H1 | -15 |
| Images missing alt text | Up to -20 |
The score is meant to be a quick way of seeing the technical state of a page, rather than pretending that a single number represents the actual Google ranking potential of a website.
A website scoring 100 doesn't automatically mean it will rank above another website scoring 70.
It's simply an easier way to identify technical issues.
Why Make It a CLI?
There are already plenty of websites where you can enter a URL and get an SEO report.
I wanted Novash to be a little different.
As a developer, I'm already spending a lot of time in the terminal, so having something like this as a CLI felt natural.
For example:
novash scan https://example.com
It can also fit into development workflows more easily than having to open a website every time.
Eventually, I'd like to make it useful in things like CI/CD pipelines as well.
Imagine pushing a website and automatically checking it for certain SEO issues before deployment.
That's one of the directions I'm interested in taking the project.
JSON Export
Another thing I wanted was the ability to use the results somewhere else.
Novash supports exporting scan results as JSON.
For example:
novash scan https://example.com --export report.json
This makes it possible to take the results and process them with another script, application, or automation workflow.
It also gives the project room to eventually support other types of reporting.
What I Used to Build It
Novash is built with Python and a few libraries that make building a CLI like this much easier.
The main technologies include:
| Technology | Used For |
|---|---|
| Python | Main programming language |
| Requests | Fetching web pages |
| BeautifulSoup | Parsing HTML |
| Typer | Building the CLI |
| Rich | Terminal output and formatting |
I also separated different checks into different modules instead of putting everything into one large file.
That made it easier to add new checks without making the entire project harder to maintain.
Releasing It on PyPI
One of the interesting parts of this project wasn't just writing the code.
I also had to figure out how to package and publish a Python project properly.
That meant working with:
pyproject.toml
building distributions, checking them with Twine, and eventually publishing the package to PyPI.
The package is now publicly available as:
pip install novash
The current release is 0.1.0.
You can find it here:
What's Next?
There are still quite a few things I want to improve.
Some ideas I have for future versions are:
- Better full-site crawling
- More technical SEO checks
- More structured-data validation
- HTML reports
- PDF reports
- Batch URL scanning
- More configurable scoring
- CI/CD integration
- More accessibility-related checks
- Better handling of large websites
I also want to keep the project relatively simple to use.
I'd rather have a command that gives useful information quickly than turn it into a giant tool with hundreds of confusing options.
Why I Built It
Novash started as a project for me to learn more about SEO, web crawling, and Python tooling.
But it also became a good exercise in something I think is important when learning programming:
actually shipping something.
It's one thing to write a Python script that works on your computer.
It's another thing to turn it into a package, create a CLI, build it, test it, publish it, and let other people install it.
That's probably been one of the most useful parts of building Novash for me.
There are still plenty of things I want to improve, but version 0.1.0 is out there now.
If you want to try it:
pip install novash
Then:
novash scan https://example.com
You can find the package on PyPI.
GitHub: Novash
I'd be interested to hear what checks you think an SEO CLI like this should have.
Top comments (0)