About
js-seo-keywords-generator
is a Node.js package designed to generate keywords for SEO purposes. The package is available on npm and can be installed and used in your Node.js project or as CLI. It is used to generate keyword ideas using Google's Autocomplete, People also search and People also ask results and save them to TXT, CSV, JSON file. Scrape results were obtained using SerpApi.
Currently supports:
- Google search
- other engines soon.
Here's a simple user guide to help you get started with using js-seo-keywords-generator
.
Installation
📌Note: If you want to use this tool for personal or commercial purposes, you must register on SerpApi and get your own API key (no credit card needed, free plan available). The default API key used is for informational purposes only.
Make sure you have Node.js installed on your computer.
If you want to use SEO Keywords generator as CLI and save results in a file, you need to install it globally:
npm i -g js-seo-keywords-generator
If you want to get results from SEO Keywords generator in your Node.js app, you need to add it to your project dependency:
npm i js-seo-keywords-generator
Before use, you need to define your API key from SerpApi. There are several ways to do this:
- Add an environment variable
API_KEY
with your key. Read more how to add it in different systems; - Add your key directly in code:
SEO.api_key = "your_api_key"
(for in-code usage only).
CLI Usage
You can see available usage options by typing in the terminal:
seo help get
Available arguments
-e, --engine <engine(s)...> Parameter defines the engine(s) of use. It can be set to "paa" (People Also Ask),
"rs" (Related Searches), "ac" (Autocomplete), or in any combination, e.g.
"paa,rs,ac" (default). (default: ["paa","rs","ac"])
-d, --domain <google domain> Parameter defines the Google domain to use. It defaults to google.com. Head to the
https://serpapi.com/google-domains for a full list of supported Google domains.
(default: "google.com")
-gl, --country <country code> Parameter defines the country to use for the Google search. Head to the
https://serpapi.com/google-countries for a full list of supported Google countries.
(default: "us")
-hl, --language <language code> Parameter defines the language to use for the Google search. Head to the
https://serpapi.com/google-languages for a full list of supported Google languages.
(default: "en")
-dl, --depth <depth limit> Parameter defines the depth of disclosure of questions for People Also Ask (default:
"1")
-ft, --type <file type> Parameter defines the type of file to save. (choices: "json", "txt", "csv", default:
"json")
-h, --help display help for command
📌Note: You can use any of the available options in any combination. You can see the full description of each of them below.
Engines use example
To get results from all supported engines you need to use the app with no engine argument:
seo get <search query>
If you want to get results from one or two selected engines you need to define the --engine
option (or short: -e
) divided by a comma, e.g. paa, ac
(People also ask and Autocomplete):
seo get <search query> -e <engine(s)>
paa
- People Also Ask engine;rs
- Related Searches (People Also Search) engine;ac
- Autocomplete engine.
Use different Google domain, country and language
You can change the default google domain google.com
to any of supported domains list by defining the --domain
(-d
) option:
seo get <search query> -d <google domain>
Also, you can change the default country us
(United States) of the search using the --country
(-gl
) option and set it to any of supported country codes list:
seo get <search query> -gl <country code>
If you want to change the default language en
(English) of the search, you need to use the --language
(-hl
) option and set it to any of supported language codes list:
seo get <search query> -hl <language code>
Available file types to save search results
The default file type to save search results is json
. You can change it to txt
or csv
using the --type
(-ft
) option:
seo get <search query> -ft <file type>
What is the depth parameter? (only for People Also Ask results)
When you open People Also Ask result, it loads more results:
- Default:
- One of the results is open:
So if you open all initial results that was mean you see next-depth results.
The depth limit parameter can be set from 1 to 3. This limit is set because, for each depth value, the number of results returned grows exponentially, for example, if the number of results is 5
at each level, for a depth of 3
, the total number of results will be equal 125
.
Output example
- Terminal output:
- Saved file:
{
"people_also_ask": [
"Was ist ein Node in der IT?",
"Für was brauche ich node js?",
"Ist Node ein Framework?",
"Wie installiere ich Node?",
"Warum eine Bitcoin Node?",
"Wer steuert den Bitcoin?",
"Was ist ein Ethereum Node?",
"Wie funktioniert eine Node?",
"Was kostet eine Bitcoin Node?",
"Welcher Coin wird Bitcoin ersetzen?",
"Was ist der billigste Bitcoin?",
"Was kostet 1 ganzer Bitcoin?",
"Ist node js kostenlos?",
"Was kann man mit Node-RED machen?",
"Wer nutzt node js?",
"Was macht ein NPM?",
"Wie funktioniert eine Node?",
"Was kostet eine Bitcoin Node?",
"Was bringt ein Bitcoin Node?",
"Wer hat den Bitcoin entwickelt?",
"Was bringt es eine Node zu betreiben?",
"Was macht ein Bitcoin Node?",
"Was ist ein Ethereum Node?",
"Wie funktioniert eine Node?",
"Wer nutzt node js?",
"Ist node js kostenlos?",
"Wie funktioniert eine Node?",
"Welche Datenbank für node js?",
"Ist Node-RED kostenlos?",
"Wie funktioniert eine Node?",
"Was kann man alles mit Node-RED machen?",
"Welches Betriebssystem für Node-RED?",
"Ist node js kostenlos?",
"Wie funktioniert eine Node?",
"Was kann man mit Node-RED machen?",
"Wer nutzt node js?"
],
"related_searches": [
"node übersetzung",
"node crypto",
"node lts",
"node version check",
"node update",
"node.js tutorial",
"node server",
"node version manager"
]
}
In-code Usage
Import SEO
to your file:
import SEO from "seo-keywords";
Available methods:
getAll(query[, domain[, country[, language[, depthlimit]]]])
getCustom(engines, query[, domain[, country[, language[, depthlimit]]]])
getPeopleAlsoAsk(query[, domain[, country[, language[, depthlimit]]]])
getRelatedSearch(query[, domain[, country[, language]]])
getAutocomplete(query[, domain[, country[, language]]])
query
- search query.engines
- parameter defines the engine(s) of use:paa
(People Also Ask)rs
(Related Searches)ac
(Autocomplete)- could be combined:
paa, ac
domain
- parameter defines the Google domain to use. Head to the Google domains page for a full list of supported Google domains. Default isgoogle.com
.country
- parameter defines the country to use for the Google search. Head to the Google countries page for a full list of supported Google countries. Default isus
.language
- parameter defines the language to use for the Google search. Head to the Google languages page for a full list of supported Google languages. Default isen
.depthlimit
- parameter defines the depth of disclosure of questions for People Also Ask. Default is1
(Only for People Also Ask engine).
Engines use example
To get results from all supported engines you need to use getAll
method:
(async () => {
console.log(await SEO.getAll(query[, domain[, country[, language[, depthlimit]]]]));
})();
query
argument is required;domain
,country
,language
, anddepthlimit
are optional arguments.
If you want to get results from one or two selected engines you need to use getCustom
method with the engines
argument divided by a comma, e.g.paa, ac
(Peaople also ask and Autocomplete):
(async () => {
console.log(await SEO.getCustom(engines, query[, domain[, country[, language[, depthlimit]]]]));
})();
engines
argument is required;paa
- People Also Ask engine;rs
- Related Searches (People Also Search) engine;ac
- Autocomplete engine.
query
argument is required;domain
,country
,language
, anddepthlimit
are optional arguments.
If you want to get results from only one engine you need to use getPeopleAlsoAsk
, getRelatedSearch
, or getAutocomplete
methods:
(async () => {
console.log(await SEO.ggetPeopleAlsoAsk(query[, domain[, country[, language[, depthlimit]]]]));
console.log(await SEO.getRelatedSearch(query[, domain[, country[, language]]]));
console.log(await SEO.getAutocomplete(query[, domain[, country[, language]]]));
})();
query
argument is required;domain
,country
,language
, anddepthlimit
are optional arguments.
Use different Google domain, country and language
You can change the default google domain google.com
to any of supported domains list by adding a domain
argument for any method.
Also, you can change the default country us
(United States) of the search using the country
argument and set it to any of supported country codes list.
If you want to change the default language en
(English) of the search, you need to use the language
argument and set it to any of supported language codes list.
What is the depth parameter? (only for People Also Ask results)
When you open People Also Ask result, it loads more results:
- Default:
- One of the results is open:
So if you open all initial results that was mean you see next-depth results.
The depth limit parameter can be set from 1 to 3. This limit is set because, for each depth value, the number of results returned grows exponentially, for example, if the number of results is 5
at each level, for a depth of 3
, the total number of results will be equal 125
.
Output example
{
"people_also_ask": ["What exactly is a node?", "What is node used for?", "Why it is called node?", "Why is node better than Python?"],
"related_searches": [
"node js",
"what is node in networking",
"node plant",
"node version",
"node js documentation",
"nodes meaning in human body",
"how does node work?",
"node js download"
],
"autocomplete": ["node js", "nodes of ranvier", "node unblocker", "node js download", "node red", "node definition", "node-fetch", "node version"]
}
Links
- SerpApi;
- Autocomplete API;
- People also search API;
- People also ask API;
- App on npm;
- Project repository;
If you want other functionality added to this demo project or if you want to see some other projects made with SerpApi, write me a message.
Add a Feature Request💫 or a Bug🐞