Skip to content

A Node.js package scan a HTML content and show all of SEO defects

Notifications You must be signed in to change notification settings

lehoangduc/seo-validator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

seo-validator

A Node.js package scan a HTML content and show all of SEO defects.

const { Validator, FileInput, ConsoleOutput } = require('seo-validator')

const validator = new Validator()
const filePath = __dirname + '/index.html'
const input = new FileInput(filePath)
const output = new ConsoleOutput()

// Skip predefined rules
validator.skipRules([1,4,5])

validator.setInput(input)
validator.setOutput(output)

try {
  validator
    .validate()
    .then(async () => {
      await validator.getResult()
    })
} catch (err) {
  console.error(err)
}

Requirements

Node.js 8.0 or greater

Installation

npm install seo-validator

Predefined Rules

  1. Detect if there are any <img /> tags without alt attribute
  2. Detect if there are any <a /> tags without rel attribute
  3. Detect if there is any header that doesn’t have <title> tag
  4. Detect if there is any header that doesn’t have <meta name="descriptions" … /> tag
  5. Detect if there is any header that doesn’t have <meta name="keywords" … /> tag
  6. Detect if there are more than 15 <strong> tag in HTML
  7. Detect if a HTML have more than one <h1> tag

API

Rule

const {
    RuleExistTag,
    RuleTagExistAttribute,
    RuleTagExistAttributeValue,
    RuleTagCountLimit,
    RuleTagCountWithoutAttribute
} = require('seo-validator')

new RuleExistTag('head', 'title')
new RuleTagExistAttribute('head', 'img', 'alt')
new RuleTagExistAttributeValue('head', 'meta', 'name', 'description')
new RuleTagCountLimit('', 'strong', 15)
new RuleTagCountWithoutAttribute('', 'img', 'alt')

// Add rules
validator.addRule(new RuleExistTag('head', 'title'))
validator.addRule(new RuleTagExistAttribute('head', 'img', 'alt'))

Input

const fs = require('fs')
const { FileInput, StreamInput } = require('seo-validator')

const filePath = __dirname + '/index.html'
const input = new FileInput(filePath)

//const stream = fs.createReadStream(filePath)
//const input = new StreamOutput(stream)

validator.setInput(input)

Output

const fs = require('fs')
const { ConsoleOutput, FileOutput, StreamOutput } = require('seo-validator')

const filePath = __dirname + '/result.log'
const output = new ConsoleOutput()

//output = new FileOutput(filePath)

//const stream = fs.createWriteStream(filePath)
//const output = new StreamOutput(stream)

validator.setOutput(output)

Validator

constructor(skipPredefinedRules)

const { Validator } = require('seo-validator')
const validator = new Validator(true)
//const validator = new Validator(false)

skipRules(indexes)

validator.skipRules([1,4,5])

setInput(input)

const { FileInput } = require('seo-validator')
const filePath = __dirname + '/index.html'
const input = new FileInput(filePath)

validator.setInput(input)

setOutput(output)

const { ConsoleOutput } = require('seo-validator')
const filePath = __dirname + '/result.log'
const output = new ConsoleOutput()

validator.setOutput(output)

addRule(rule)

validator.addRule(new RuleExistTag('head', 'title'))

validate() && getResult()

try {
  validator
    .validate()
    .then(async () => {
      await validator.getResult()
    })
} catch (err) {
  console.error(err)
}

Custom Rules

const { Rule } = require('seo-validator')

class NewRule extends Rule {
  constructor(rootTag, ...params) {
    super(rootTag)
    ...
  }

  validate() {
    // Write logic
    this.isValid = true // or false
  }

  error() {
    return !this.isValid ? `Error message` : ''
  }
}

About

A Node.js package scan a HTML content and show all of SEO defects

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published