<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Britto K</title>
    <description>The latest articles on DEV Community by Britto K (@britto_k_cf70d50bf023d5ba).</description>
    <link>https://dev.to/britto_k_cf70d50bf023d5ba</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4003971%2F6b17986b-4e08-40bb-9ed6-06f82a93e462.jpg</url>
      <title>DEV Community: Britto K</title>
      <link>https://dev.to/britto_k_cf70d50bf023d5ba</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/britto_k_cf70d50bf023d5ba"/>
    <language>en</language>
    <item>
      <title>I Built "seoextract": A Python CLI Tool That Audits Website SEO from the Terminal</title>
      <dc:creator>Britto K</dc:creator>
      <pubDate>Thu, 02 Jul 2026 11:53:57 +0000</pubDate>
      <link>https://dev.to/britto_k_cf70d50bf023d5ba/i-built-seoextract-a-python-cli-tool-that-audits-website-seo-from-the-terminal-4o3n</link>
      <guid>https://dev.to/britto_k_cf70d50bf023d5ba/i-built-seoextract-a-python-cli-tool-that-audits-website-seo-from-the-terminal-4o3n</guid>
      <description>&lt;p&gt;SEO tools are useful, but many of them are either too heavy, too expensive, or too dependent on dashboards.&lt;/p&gt;

&lt;p&gt;So I built seoextract — a simple Python CLI package that audits a website directly from the terminal and gives a clear SEO report with scores, grades, and actionable issues.&lt;/p&gt;

&lt;p&gt;The goal was simple:&lt;/p&gt;

&lt;p&gt;«Enter a website URL. Get an SEO audit. Understand what needs to be fixed.»&lt;/p&gt;




&lt;p&gt;What is "seoextract"?&lt;/p&gt;

&lt;p&gt;"seoextract" is a Python-based SEO audit tool that crawls a website and checks common SEO problems such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Missing or weak title tags&lt;/li&gt;
&lt;li&gt;Missing meta descriptions&lt;/li&gt;
&lt;li&gt;Thin content&lt;/li&gt;
&lt;li&gt;Missing canonical tags&lt;/li&gt;
&lt;li&gt;Poor internal linking&lt;/li&gt;
&lt;li&gt;Missing schema markup&lt;/li&gt;
&lt;li&gt;Missing viewport meta tag&lt;/li&gt;
&lt;li&gt;Basic page-level SEO quality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It then calculates a score and grade for the website.&lt;/p&gt;

&lt;p&gt;Example output:&lt;/p&gt;

&lt;p&gt;seoextract audit &lt;a href="https://www.python.org" rel="noopener noreferrer"&gt;https://www.python.org&lt;/a&gt; --max-pages 1&lt;/p&gt;

&lt;p&gt;Output:&lt;/p&gt;

&lt;p&gt;SEO Audit Complete&lt;/p&gt;

&lt;p&gt;URL: &lt;a href="https://www.python.org" rel="noopener noreferrer"&gt;https://www.python.org&lt;/a&gt;&lt;br&gt;
Pages crawled: 1&lt;br&gt;
Site score: 75.0&lt;br&gt;
Grade: B&lt;br&gt;
Total issues: 3&lt;br&gt;
Critical: 0&lt;br&gt;
Warnings: 2&lt;br&gt;
Info: 1&lt;/p&gt;




&lt;p&gt;Why I Built It&lt;/p&gt;

&lt;p&gt;Most beginners learn SEO as a checklist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add a title&lt;/li&gt;
&lt;li&gt;Add a meta description&lt;/li&gt;
&lt;li&gt;Use headings properly&lt;/li&gt;
&lt;li&gt;Add internal links&lt;/li&gt;
&lt;li&gt;Add schema markup&lt;/li&gt;
&lt;li&gt;Improve content length&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But when building real websites, manually checking every page becomes boring and repetitive.&lt;/p&gt;

&lt;p&gt;I wanted to build something that could automate the basic audit process.&lt;/p&gt;

&lt;p&gt;At the same time, I wanted this project to help me improve my Python skills, especially in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web scraping&lt;/li&gt;
&lt;li&gt;CLI development&lt;/li&gt;
&lt;li&gt;Package structuring&lt;/li&gt;
&lt;li&gt;SEO rule design&lt;/li&gt;
&lt;li&gt;Publishing Python packages to PyPI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is how "seoextract" started.&lt;/p&gt;




&lt;p&gt;How It Works&lt;/p&gt;

&lt;p&gt;The workflow is straightforward.&lt;/p&gt;

&lt;p&gt;First, the user runs a command from the terminal:&lt;/p&gt;

&lt;p&gt;seoextract audit &lt;a href="https://example.com" rel="noopener noreferrer"&gt;https://example.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then "seoextract" performs these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fetches the page HTML&lt;/li&gt;
&lt;li&gt;Parses the page content&lt;/li&gt;
&lt;li&gt;Extracts SEO-related elements&lt;/li&gt;
&lt;li&gt;Applies built-in SEO rules&lt;/li&gt;
&lt;li&gt;Calculates a score&lt;/li&gt;
&lt;li&gt;Displays a structured audit report&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The tool checks both technical SEO signals and content-level signals.&lt;/p&gt;

&lt;p&gt;For example, if a page has no meta description, the tool reports it as an issue and gives a fix suggestion:&lt;/p&gt;

&lt;p&gt;[WARNING] Missing Meta Description&lt;br&gt;
fix: Add a meta description between 50–160 characters summarising the page.&lt;/p&gt;




&lt;p&gt;Example Audit&lt;/p&gt;

&lt;p&gt;Running:&lt;/p&gt;

&lt;p&gt;seoextract audit &lt;a href="https://example.com" rel="noopener noreferrer"&gt;https://example.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;May return something like:&lt;/p&gt;

&lt;p&gt;Audit Summary&lt;/p&gt;

&lt;p&gt;site_score      : 59.0&lt;br&gt;
grade           : D&lt;br&gt;
pages_crawled   : 1&lt;br&gt;
total_issues    : 7&lt;br&gt;
safe_browsing   : True&lt;/p&gt;

&lt;p&gt;Detected issues:&lt;/p&gt;

&lt;p&gt;[WARNING] Title Too Short&lt;br&gt;
fix: Title is 14 chars. Expand to at least 50 characters.&lt;/p&gt;

&lt;p&gt;[WARNING] Missing Meta Description&lt;br&gt;
fix: Add a meta description between 50–160 characters summarising the page.&lt;/p&gt;

&lt;p&gt;[WARNING] Thin Content&lt;br&gt;
fix: Page has only 21 words. Aim for at least 300 words of meaningful content.&lt;/p&gt;

&lt;p&gt;[INFO] Missing Canonical Tag&lt;br&gt;
fix: Add a canonical tag to prevent duplicate content issues.&lt;/p&gt;

&lt;p&gt;[INFO] Poor Internal Linking&lt;br&gt;
fix: Add at least 2 internal links to help search engines discover related pages.&lt;/p&gt;

&lt;p&gt;[INFO] No Schema Markup&lt;br&gt;
fix: Add Schema.org structured data to improve search result appearance.&lt;/p&gt;

&lt;p&gt;This makes the report beginner-friendly because it does not just say what is wrong. It also tells what needs to be fixed.&lt;/p&gt;




&lt;p&gt;Features&lt;/p&gt;

&lt;p&gt;The current version includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website SEO auditing from the terminal&lt;/li&gt;
&lt;li&gt;Page crawling with max-page control&lt;/li&gt;
&lt;li&gt;SEO issue detection&lt;/li&gt;
&lt;li&gt;Score and grade calculation&lt;/li&gt;
&lt;li&gt;Human-readable fix suggestions&lt;/li&gt;
&lt;li&gt;CLI interface&lt;/li&gt;
&lt;li&gt;PyPI package support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The command format is simple:&lt;/p&gt;

&lt;p&gt;seoextract audit  --max-pages &lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;seoextract audit &lt;a href="https://www.python.org" rel="noopener noreferrer"&gt;https://www.python.org&lt;/a&gt; --max-pages 1&lt;/p&gt;




&lt;p&gt;What I Learned While Building It&lt;/p&gt;

&lt;p&gt;This project taught me that even a simple CLI tool needs proper structure.&lt;/p&gt;

&lt;p&gt;At first, web scraping looks like it can be done in just a few lines of Python using BeautifulSoup.&lt;/p&gt;

&lt;p&gt;But a real tool needs more than that.&lt;/p&gt;

&lt;p&gt;It needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Input validation&lt;/li&gt;
&lt;li&gt;Error handling&lt;/li&gt;
&lt;li&gt;HTML parsing&lt;/li&gt;
&lt;li&gt;URL normalization&lt;/li&gt;
&lt;li&gt;Rule-based checks&lt;/li&gt;
&lt;li&gt;Scoring logic&lt;/li&gt;
&lt;li&gt;Clean terminal output&lt;/li&gt;
&lt;li&gt;Package configuration&lt;/li&gt;
&lt;li&gt;CLI command registration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why a proper project structure matters.&lt;/p&gt;

&lt;p&gt;A 5-line script can scrape a title.&lt;/p&gt;

&lt;p&gt;But a package should be reliable, reusable, and understandable.&lt;/p&gt;




&lt;p&gt;Why This Project Matters&lt;/p&gt;

&lt;p&gt;"seoextract" is not trying to replace advanced SEO platforms.&lt;/p&gt;

&lt;p&gt;Instead, it is useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Beginners learning SEO&lt;/li&gt;
&lt;li&gt;Developers checking their websites&lt;/li&gt;
&lt;li&gt;Students building portfolio projects&lt;/li&gt;
&lt;li&gt;Freelancers auditing small websites&lt;/li&gt;
&lt;li&gt;Python learners practicing real-world CLI tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is a practical project because it combines programming with a real business use case.&lt;/p&gt;

&lt;p&gt;SEO is not just a technical topic. It connects directly to traffic, visibility, leads, and marketing.&lt;/p&gt;

&lt;p&gt;That makes this project more useful than a basic toy script.&lt;/p&gt;




&lt;p&gt;Future Improvements&lt;/p&gt;

&lt;p&gt;The next versions can include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LLM-based SEO suggestions&lt;/li&gt;
&lt;li&gt;Better scoring rules&lt;/li&gt;
&lt;li&gt;Export to JSON, CSV, or PDF&lt;/li&gt;
&lt;li&gt;More detailed page reports&lt;/li&gt;
&lt;li&gt;Broken link detection&lt;/li&gt;
&lt;li&gt;Keyword density analysis&lt;/li&gt;
&lt;li&gt;Image alt text checking&lt;/li&gt;
&lt;li&gt;Sitemap detection&lt;/li&gt;
&lt;li&gt;Robots.txt analysis&lt;/li&gt;
&lt;li&gt;Better multi-page crawling&lt;/li&gt;
&lt;li&gt;AI-generated recommendations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One important improvement I am planning is to add optional LLM support so the tool can generate more detailed recommendations based on the page content.&lt;/p&gt;

&lt;p&gt;For example, instead of only saying:&lt;/p&gt;

&lt;p&gt;Missing meta description&lt;/p&gt;

&lt;p&gt;It could suggest:&lt;/p&gt;

&lt;p&gt;Suggested meta description:&lt;br&gt;
Learn Python programming with tutorials, documentation, downloads, and community resources from Python.org.&lt;/p&gt;

&lt;p&gt;That would make the tool much more useful for real users.&lt;/p&gt;




&lt;p&gt;Final Thoughts&lt;/p&gt;

&lt;p&gt;Building "seoextract" helped me understand how real developer tools are structured.&lt;/p&gt;

&lt;p&gt;It is not just about writing scraping code.&lt;/p&gt;

&lt;p&gt;It is about turning code into a usable product:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A CLI command&lt;/li&gt;
&lt;li&gt;A package&lt;/li&gt;
&lt;li&gt;A report system&lt;/li&gt;
&lt;li&gt;A scoring engine&lt;/li&gt;
&lt;li&gt;A tool that someone else can install and use&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This project started as a simple SEO checker, but it became a strong learning experience in Python packaging, CLI development, and practical automation.&lt;/p&gt;

&lt;p&gt;If you are learning Python, I highly recommend building small CLI tools like this.&lt;/p&gt;

&lt;p&gt;They force you to think beyond code and start thinking like a product builder.&lt;/p&gt;

</description>
      <category>python</category>
      <category>webdev</category>
      <category>seo</category>
      <category>cli</category>
    </item>
  </channel>
</rss>
