Socket
Book a DemoInstallSign in
Socket

@nickreese/seo-lint

Package Overview
Dependencies
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@nickreese/seo-lint

A robust SEO linter for local html files

1.1.2
latest
Source
npmnpm
Version published
Maintainers
1
Created
Source

seo-lint: A Robust SEO Linter / Checker for Local HTML Files

This package offers both a CLI and a library to help you with linting HTML for over 50 common SEO issues.

This SEO tool was spun out of Elder.js' plugin called seo-check.

Tester (Library Usage)

The library exports a Tester method which returns an object with 2 methods: folder and test.

Recursive Folder Linting: folder

If you have a folder of .html files you're looking to check for common SEO issues, you just need to specify the folder and seo-lint will recursively check all of the .html files for issues.

const { Tester } = require('./Tester');
const tester = Tester({ siteWide: true, host: 'example.com' });
const results = await tester.folder('public'); // relative to process.cwd()

Raw HTML Linting: test

If you have a build process that generates HTML, such as a static site generator, and want to lint that html generated for common SEO issues you can do the following:

const { Tester } = require('./Tester');
const tester = Tester({ host: 'example.com' });
const results = await tester.test(html, relPermalink);

// results will be an object with issues by url and sitewide issues.

CLI

$ npm i -g  @nickreese/seo-lint

Usage:

seo-lint <dir> [options]

Options

  • -H, --host Set the expected host for internal links. (example.com)
  • -v, --version Displays current version
  • -c, --config Set a custom config to specify rules.
  • -w, --write Location to write a report to a JSON file.

CLI config

// const { defaultPreferences, rules } = require('@nickreese/seo-lint');
// available if you want the defaults from the package.
module.exports = {
  rules: [],
  preferences: {},
  writeLocation: `./report.json`, // if this is set it assumes you want the report written.
  display: ['errors', 'warnings'],
};

Advanced Example:

$ seo-lint public -H example.com -c seo-lint.config.js -w report.json

Checks

Sitewide

These are only checked when Elder.js runs in build mode.

  • check for orphaned pages (no incoming internal links)
  • check for broken internal links.
  • check for duplicate title tags
  • check for duplicate meta descriptions

Canonical

  • canonical tag exists
  • canonical tag matches request.permalink

Title Tag

  • Title tag exists
  • Title tag innerText and innerHTML are the same. (no html tags in your title tag)
  • Only one title tag per page
  • Title tag is less than 70 chars
  • Title tag is more than 10 chars
  • Title doesn't include common stopwords.
  • Title tag doesn't have null
  • Title tag doesn't have undefined
  • checks for stop words.

Meta Description

  • meta description exists
  • only one meta description tag per page
  • Meta description doesn't have null
  • Meta description doesn't have undefined
  • Meta description is longer than 10 chars
  • Meta description is less than than 120 chars
  • Meta description is longer than 300 chars (sometimes things go REALLY wrong and this helps catch it.)
  • Meta description includes at least one the keywords of the title tag.

HTags

  • h1 Exists on page
  • only a single h1 per page.
  • h1 has at least one word from your title tag
  • h1 is less than 70 chars
  • h1 is more than than 10 chars
  • H2 or H3 don't exist if an H1 is missing.
  • H2 exists on the page
  • h2 is less than 100 chars
  • h2 is more than than 10 chars
  • At least one of your h2s contains a single word from your title tag.
  • h3 is less than 100 chars
  • h3 is more than than 7 chars
  • h4 is less than 100 chars
  • h4 is more than than 7 chars
  • If no h2s checks for h3s.
  • If no h3s checks for h4s.
  • If no h4s checks for h5s.
  • If no h5s checks for h6s.

Images

  • Checks images for alt tags.
  • Internal links are lowercase
  • Internal links have trailing slash
  • Internal links are not nofollow
  • Notifies if there are more than 50 outbound links on the page.
  • check for trailing index.html
  • internal fully formed links include 'https'

Misc

  • Checks for width=device-width, initial-scale=1.0 meta viewport.

Credits:

Written by Nick Reese. Initially written to audit Elder Guide.

Contributing

  • We could add a way to filter out rules based on name.

License

This project is licensed under the MIT License - see the LICENSE file for details.

FAQs

Package last updated on 28 Jun 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.