SEO Recommender (Beta)
Parse HTML and provide suggestions on SEO. Powered by cheerio.
Installation
npm install seo-recommender
Constants
INPUT_TYPE
- INPUT_TYPE.FILE
- INPUT_TYPE.STREAM
OUTPUT_TYPE
- OUTPUT_TYPE.CONSOLE
- Default behaviour if specify nothing
- OUTPUT_TYPE.FILE
- OUTPUT_TYPE.STREAM
PREDEFINED_RULE_GROUPS
There are 5 pre-defined rule groups, used when specifying white list
- PREDEFINED_RULE_GROUPS.IMG_WITHOUT_ALT
- PREDEFINED_RULE_GROUPS.A_WITHOUT_REL
- PREDEFINED_RULE_GROUPS.HEAD_HAS_META_WITH_ATTR
- PREDEFINED_RULE_GROUPS.NUM_OF_STRONG
- PREDEFINED_RULE_GROUPS.NUM_OF_H1
RULE_TYPES
There 3 rule types according to pre-defined rule groups, used when adding more rules
- RULE_TYPES.TAG_WITHOUT_ATTR
- RULE_TYPES.TAG_WITHOUT_TAG_WITH_ATTR_AND_VALUE
- RULE_TYPES.NUMBER_OF_TAG_NO_MORE_THAN
API
addRule(rules)
Provide a list of objects for adding custom rules.
Must be called before calling API run()
.
E.g. Check if <meta name="robots" />
exists or not
var rcmndr = new SEORecommender();
rcmndr.addRules([{
ruleType: RULE_TYPES.TAG_WITHOUT_TAG_WITH_ATTR_AND_VALUE,
tag: 'head',
conditions: {
tag: 'meta',
attr: 'name',
value: 'robots',
},
userDefinedConditions: null,
desc: 'This HTML does not have %s tag',
}]);
run(options)
Start parsing and recommending.
Provide an options
object.
E.g. run with options:
- Input type is a file path
- File path
- Output type is printing on console
var rcmndr = new SEORecommender();
rcmndr.run({
inType: INPUT_TYPE.FILE,
inPath: 'test.html',
outType: OUTPUT_TYPE.CONSOLE,
});
Check exmpale
for more information.
Usage
const fs = require('fs');
const {
SEORecommender,
INPUT_TYPE,
OUTPUT_TYPE,
PREDEFINED_RULE_GROUPS,
RULE_TYPES,
} = require('seo-recommender');
function inputFileOutputConsole() {
var rcmndr = new SEORecommender();
rcmndr.run({
inType: INPUT_TYPE.FILE,
inPath: 'test.html',
outType: OUTPUT_TYPE.CONSOLE,
});
}
function inputStreamOutputFile() {
var rcmndr = new SEORecommender();
var inStream = fs.createReadStream('test.html');
rcmndr.run({
inType: INPUT_TYPE.STREAM,
inStream: inStream,
outType: OUTPUT_TYPE.FILE,
outPath: 'output',
});
}
function inputStreamOutputStream() {
var rcmndr = new SEORecommender();
var inStream = fs.createReadStream('test.html');
rcmndr.run({
inType: INPUT_TYPE.STREAM,
inStream: inStream,
outType: OUTPUT_TYPE.STREAM,
callback: (writable) => {
console.log('writable =', writable);
},
});
}
function addRules() {
var rcmndr = new SEORecommender();
rcmndr.addRules([{
ruleType: RULE_TYPES.TAG_WITHOUT_TAG_WITH_ATTR_AND_VALUE,
tag: 'head',
conditions: {
tag: 'meta',
attr: 'name',
value: 'robots',
},
userDefinedConditions: null,
desc: 'This HTML does not have %s tag',
}]);
rcmndr.run({
inType: INPUT_TYPE.FILE,
inPath: 'test.html',
outType: OUTPUT_TYPE.CONSOLE,
});
}
function addRulesWhiteList() {
var rcmndr = new SEORecommender();
rcmndr.run({
rulesWhiteList: [PREDEFINED_RULE_GROUPS.IMG_WITHOUT_ALT],
inType: INPUT_TYPE.FILE,
inPath: 'test.html',
outType: OUTPUT_TYPE.CONSOLE,
});
}
inputFileOutputConsole();