seo-quick-checker
v0.0.11
Published
A package to quickly check if the HTML is SEO friendly.
Readme
seo-quick-checker

A package to quickly check if the HTML is SEO friednly. It outputs the notice messages after parsing the HTML file provided.
Installation
npm i seo-quick-checker
Getting Started
1. Basic Setup
Create a project.
mkdir test
cd test
npm init
npm i2. Create Files
Create folders and files inside the project.
touch index.js
mkdir input
touch input/index.html
mkdir outputTo test out, you can copy-paste these code to index.js and input/index.html.
index.js
'use strict';
const {
defaultRules,
ruleBuilders,
getDom,
seoQuickChecker,
output,
} = require('seo-quick-checker');
(async function() {
try {
const dom = await getDom.fromFile('./input/index.html');
const notices = seoQuickChecker(dom, defaultRules.all);
await output.toFile('./output/output.txt', notices);
} catch (error) {
console.error(error);
}
})();input/index.html
<!-- no title under head -->
<!-- no meta description under head -->
<!-- no meta keywords under head -->
<!-- more than 1 h1 tag -->
<!-- more than 15 strong tags -->
<!-- img without alt -->
<!-- a without rel -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<h1>test</h1>
<h1>test</h1>
<div><strong>test</strong></div>
<div><strong>test</strong></div>
<div><strong>test</strong></div>
<div><strong>test</strong></div>
<div><strong>test</strong></div>
<div><strong>test</strong></div>
<div><strong>test</strong></div>
<div><strong>test</strong></div>
<div><strong>test</strong></div>
<div><strong>test</strong></div>
<div><strong>test</strong></div>
<div><strong>test</strong></div>
<div><strong>test</strong></div>
<div><strong>test</strong></div>
<div><strong>test</strong></div>
<div><strong>test</strong></div>
<img />
<a>link</a>
</body>
</html>Now you can run the script.
node index.jsWhen it's successfully done, output/output.txt will be created.
output/output.txt
There are(is) 1 a without rel.
This HTML does not have head meta[name=description] tag.
This HTML does not have head meta[name=keywords] tag.
This HTML does not have head title tag.
There are(is) 1 img without alt.
This HTML has more than 1 h1.
This HTML has more than 15 strong.API Reference
List of APIs
- defaultRules module
- ruleBuilders module
- getDom module
- seoQuickChecker function
- output module
1. defaultRules module
A module contains default rule functions.
defaultRules.all : Function[]
Return all the functions of the default rules.
defaultRules.all;
//=>
// [
// aMissingRel,
// noMetaDescriptionInHead,
// noMetaKeywordsInHead,
// noTitleInHead,
// imgMissingAlt,
// moreThan1H1,
// moreThan15Strong,
// ]defaultRules.aMissingRel : Function
Check if there are <a> tags missing rel attribute.
defaultRules.noMetaDescriptionInHead : Function
Check if meta description exists in head.
defaultRules.noMetaKeywordsInHead : Function
Check if meta keywords exists in head.
defaultRules.noTitleInHead : Function
Check if title exists in head.
defaultRules.imgMissingAlt : Function
Check if there are <img> tags missing alt attribute.
defaultRules.moreThan1H1 : Function
Check if there are more than 1 h1 tags.
defaultRules.moreThan15Strong : Function
Check if there are more than 15 strong tags.
> Usage
If you want to check all the default rules.
const notices = seoQuickChecker(dom, defaultRules.all);If you want to check, for example, defaultRules.aMissingRel
and defaultRules.noMetaDescriptionInHead
You can use [] to wrap them because each of them is the function but second param of seoQuickChecker is an array.
const notices = seoQuickChecker(dom, [
defaultRules.aMissingRel,
defaultRules.noMetaDescriptionInHead,
]);2. ruleBuilders module
A module to create rule functions.
ruleBuilders.tagCountMoreThan(tag, maxCount) : Function
Create a function which checks if the number of tag is more than maxCount
| params | type | description | | :------- | :----: | :---------------------------------------------------------------------------------------------- | | tag | string | Required | | maxCount | number | Required. Max count of the tag. Notice will be created if the count is more than this maxCount. |
ruleBuilders.tagMissingAttr(tag, attr) : Function
Create a function which checks if the tag is missing the attribute.
| params | type | description | | :----- | :----: | :---------- | | tag | string | Required. | | attr | string | Required. |
ruleBuilders.tagExists(tag) : Function
Create a function which checks if the tag exists.
| params | type | description | | :----- | :----: | :---------- | | tag | string | Required. |
> Usage
If you want to use custom rules by using this module, you can write like this.
// Check if the number of h2 is more than 1.
const customRule1 = ruleBuilders.tagCountMoreThan('h2', 1);
// Check if span tag is missing class attribute.
const customRule2 = ruleBuilders.tagMissingAttr('span', 'class');
// Check if meta[name=robot] exists in head.
const customRule3 = ruleBuilders.tagExists('head meta[name=robots]');
const notices = seoQuickChecker(dom, [customRule1, customRule2, customRule3]);3. getDom module
Get dom function from file or stream.
getDom.fromFile(filePath[, encoding]) : Promise<function>
Get dom function from file.
| params | type | description | | :------- | :----: | :------------------ | | filePath | string | Required. | | encoding | string | Defaults to "utf8". |
getDom.fromStream(rs) : Promise<function>
Get dom function from stream.
| params | type | description | | :----- | :-------------: | :---------- | | rs | stream.Readable | Required. |
4. seoQuickChecker function
Check the HTML using the rules provided. Return the notices.
seoQuickChecker(dom, rules) : string[]
| params | type | description |
| :----- | :--------: | :---------------------------------------------------------------------------------------------------------------------------------- |
| dom | Function | Required. The function returned from getDom.fromFile or getDom.fromStream. |
| rules | Function[] | Required. An array contains the functions defined in defaultRules modules or user defined rules created by ruleBuilders module. |
5. output module
Output the notices to console.log, file, or stream.
output.toConsoleLog(notices[, connector]) : undefined
Outputs to console.log.
| params | type | description |
| :-------- | :------: | :----------------------------------------------------------------------- |
| notices | string[] | Required. You can use the returning value of seoQuickChecker function. |
| connector | string | Defaults to "\n". |
output.toFile(filePath, notices[, connector][, options]) : Promise<undefined>
Outputs to file.
| params | type | description |
| :-------- | :------: | :------------------------------------------------------------------------------------------------------------------------- |
| filePath | string | Required. |
| notices | string[] | Required. You can use the returning value of seoQuickChecker function. |
| connector | string | Defaults to "\n". |
| options | Object | Defaults to {}. Please see https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback for more details. |
output.toStream(ws, notices[, connector][, encoding]) : Promise<undefined>
Outputs to stream.
| params | type | description |
| :-------- | :-------------: | :----------------------------------------------------------------------- |
| ws | stream.Writable | Required. |
| notices | string[] | Required. You can use the returning value of seoQuickChecker function. |
| connector | string | Defaults to "\n". |
| encoding | string | Defaults to "utf8". |
More Examples
Use stream to getDom
const dom = await getDom.fromStream(rs);
Full example of index.js.
'use strict';
const fs = require('fs');
const {
defaultRules,
ruleBuilders,
getDom,
seoQuickChecker,
output,
} = require('seo-quick-checker');
(async function() {
try {
const rs = fs.createReadStream('./input/index.html', 'utf8');
const dom = await getDom.fromStream(rs);
const notices = seoQuickChecker(dom, defaultRules.all);
await output.toFile('./output/output.txt', notices);
} catch (error) {
console.error(error);
}
})();Use stream to output.
await output.toStream(ws, notices);
Full example of index.js.
'use strict';
const fs = require('fs');
const {
defaultRules,
ruleBuilders,
getDom,
seoQuickChecker,
output,
} = require('seo-quick-checker');
(async function() {
try {
const rs = fs.createReadStream('./input/index.html', 'utf8');
const dom = await getDom.fromStream(rs);
const notices = seoQuickChecker(dom, defaultRules.all);
const ws = fs.createWriteStream('./output/output.txt', 'utf8');
await output.toStream(ws, notices);
} catch (error) {
console.error(error);
}
})();Output to console.log
output.toConsoleLog(notices);
Please be careful, there is no await before output.toConsoleLog(notices).
Full example of index.js.
'use strict';
const fs = require('fs');
const {
defaultRules,
ruleBuilders,
getDom,
seoQuickChecker,
output,
} = require('seo-quick-checker');
(async function() {
try {
const rs = fs.createReadStream('./input/index.html', 'utf8');
const dom = await getDom.fromStream(rs);
const notices = seoQuickChecker(dom, defaultRules.all);
output.toConsoleLog(notices);
} catch (error) {
console.error(error);
}
})();LICENSE
MIT
