The keywordr package provides an efficient and user-friendly framework for keyword research. The results are typically used to optimize websites for search engines, create content strategy, design information architecture for websites, etc.
Installation
You can install the development version of keywordr from GitHub with:
# install.packages("devtools")
devtools::install_github("MarekProkop/keywordr", build_vignettes = TRUE)
Note: You must have R version 4.1.0 because the package makes use of the native R pipe and the new syntax for anonymous functions.
Example
This is a basic example which shows you how to use the package:
Create a kwresearch
object and import queries
input_data <- tribble(
~query, ~volume,
"seo", 96000,
"seo ye-ji", 22000,
"seo meaning", 6700,
"seo services", 6400,
"what is a seo", 5300,
"seo london", 5000,
"what is seo", 4800,
"seo agency", 4300,
)
kwr <- kwresearch(input_data)
Browse imported queries
kwr_queries(kwr)
#> # A tibble: 8 × 7
#> query_normalized n_queries volume cpc query_original input source
#> <chr> <int> <dbl> <dbl> <chr> <chr> <chr>
#> 1 seo 1 96000 NA seo <NA> <NA>
#> 2 seo ye-ji 1 22000 NA seo ye-ji <NA> <NA>
#> 3 seo meaning 1 6700 NA seo meaning <NA> <NA>
#> 4 seo services 1 6400 NA seo services <NA> <NA>
#> 5 what is a seo 1 5300 NA what is a seo <NA> <NA>
#> 6 seo london 1 5000 NA seo london <NA> <NA>
#> 7 what is seo 1 4800 NA what is seo <NA> <NA>
#> 8 seo agency 1 4300 NA seo agency <NA> <NA>
Prune unwanted queries
recipe_file <- file.path(tempdir(), "recipes.yml")
kwr_add_pattern("ye-ji", recipe_file, recipe_type = "remove")
kwr <- kwr |>
kwr_prune(recipe_file)
#> Removing queries...
#> Removed 1 queries out of 8. Duration: 0.006s
Check pruned queries
kwr_queries(kwr)
#> # A tibble: 7 × 7
#> query_normalized n_queries volume cpc query_original input source
#> <chr> <int> <dbl> <dbl> <chr> <chr> <chr>
#> 1 seo 1 96000 NA seo <NA> <NA>
#> 2 seo meaning 1 6700 NA seo meaning <NA> <NA>
#> 3 seo services 1 6400 NA seo services <NA> <NA>
#> 4 what is a seo 1 5300 NA what is a seo <NA> <NA>
#> 5 seo london 1 5000 NA seo london <NA> <NA>
#> 6 what is seo 1 4800 NA what is seo <NA> <NA>
#> 7 seo agency 1 4300 NA seo agency <NA> <NA>
Explore queries
kwr |> kwr_ngrams()
#> # A tibble: 8 × 3
#> token n volume
#> <chr> <int> <dbl>
#> 1 seo 7 128500
#> 2 what is 2 10100
#> 3 seo meaning 1 6700
#> 4 seo services 1 6400
#> 5 what is a seo 1 5300
#> 6 seo london 1 5000
#> 7 what is seo 1 4800
#> 8 seo agency 1 4300
Classify queries
kwr_add_pattern(
pattern = "agenc",
recipe_file = recipe_file,
recipe_type = "label",
dim_name = "bussiness_type",
value = "agency"
)
kwr_add_pattern(
pattern = "meaning",
recipe_file = recipe_file,
recipe_type = "label",
dim_name = "info"
)
kwr_add_pattern(
pattern = "what is",
recipe_file = recipe_file,
recipe_type = "label",
dim_name = "info"
)
kwr <- kwr |>
kwr_classify(recipe_file)
#> Label:bussiness_type
#> Value: agency
#> Label:info
Check classified queries
kwr_queries(kwr) |>
select(1:5)
#> # A tibble: 7 × 5
#> query_normalized bussiness_type info n_queries volume
#> <chr> <chr> <chr> <int> <dbl>
#> 1 seo <NA> <NA> 1 96000
#> 2 seo meaning <NA> meaning 1 6700
#> 3 seo services <NA> <NA> 1 6400
#> 4 what is a seo <NA> what is 1 5300
#> 5 seo london <NA> <NA> 1 5000
#> 6 what is seo <NA> what is 1 4800
#> 7 seo agency agency <NA> 1 4300
Please see vignette("workflow")
for a more detailed example.