library(tidyverse)
library(searchConsoleR)
Příprava
Skriptu stačí tyhle dva balíčky.
A klasická autorizace do Search Console. Kdybych neměl svůj Google e-mail uložený v systémové proměnné, musel bych ho napsat do parametru email
přímo.
scr_auth(email = Sys.getenv("MY_GOOGLE_ACCOUNT"))
Funkcí list_websites
načtu všechny weby, které v Search Consoli mám, a uložím si je do objektu websites
.
<- list_websites() websites
Seznam vypadá nějak takhle, jen jsem konkrétní weby ze své Search Console anonymizoval, abych mohl výstup publikovat. Když vynechám poslední řádek, budou weby normálně vidět.
|>
websites slice_sample(n = 10) |>
mutate(siteUrl = anonymize_site(siteUrl))
siteUrl permissionLevel
1 http://anonymized.com/ siteFullUser
2 https://anonymized.cz/ siteFullUser
3 sc-domain:anonymized.cz siteFullUser
4 sc-domain:anonymized.cz siteRestrictedUser
5 https://anonymized.cz/d siteFullUser
6 http://anonymized.cz/p siteFullUser
7 https://anonymized.cz/e siteFullUser
8 https://anonymized.cz/c siteFullUser
9 sc-domain:anonymized.sk siteFullUser
10 sc-domain:anonymized.com siteOwner
Neautorizované weby
Důležitý je sloupec permissionLevel
. Mám v něm tyhle hodnoty:
|>
websites count(permissionLevel)
permissionLevel n
1 siteFullUser 67
2 siteOwner 32
3 siteRestrictedUser 17
4 siteUnverifiedUser 3
Zbavit se chci webů, ke kterým nemám povolený přístup. Vypíšu si je a raději je pečlivě zkontroluju (samozřejmě až odstraním anonymizaci na posledním řádku).
<- websites |>
unverified_websites filter(permissionLevel == "siteUnverifiedUser")
|>
unverified_websites mutate(siteUrl = anonymize_site(siteUrl))
siteUrl permissionLevel
1 sc-domain:anonymized.cz siteUnverifiedUser
2 http://anonymized.sk/ siteUnverifiedUser
3 http://anonymized.cz/ siteUnverifiedUser
Ze Search Console si je pak odstraním takto. Jen před tím přepíšu na prvním řádku FALSE
na TRUE
. Dal jsem to tam proto, abych si nechtěně nesmazal weby před tím, než si je zkontroluju.
if (FALSE) {
|>
unverified_websites pull(siteUrl) |>
walk(delete_website)
}
Když to pustím, křičí to na mě nějaké warningy ohledně JSON. Asi je někde nějaká chybka, ale podle všeho ničemu nevadí a skript dělá to, co má. Každopádně si pak můžu ověřit, jestli už jsou všechny neverifikované weby pryč:
list_websites() |>
filter(permissionLevel == "siteUnverifiedUser")
Weby bez dat
Kromě neutorizovaných webů se chci zbavit i těch, které už dlouho nemají žádná data.
Nejdřív si definuju funkci, která načte souhrnné metriky jednoho webu za poslední dva roky. K výsledku přidám do prvního sloupce i URL webu, abych ho poznal, až jich bude v tabulce víc.
<- function(site) {
get_site_metrics search_analytics(
siteURL = site,
startDate = Sys.Date() - 365 * 2,
|>
) add_column(site = site, .before = 1)
}
Ověřím, zda funkce funguje.
get_site_metrics("http://www.marekp.cz/")
Fetching search analytics for url: http://www.marekp.cz/ dates: 2021-02-18 2023-02-15 dimensions: dimensionFilterExp: searchType: web aggregationType: auto
site clicks impressions ctr position
1 http://www.marekp.cz/ 1997 52140 0.03830073 11.22434
Funguje, takže ji mohu pomocí funkce map_dfr
z balíčku purrr aplikovat na celý seznam webů, ke kterým mám autorizovaný přístup. S více weby to nějakou chvíli poběží.
<- websites |>
all_site_metrics filter(permissionLevel != "siteUnverifiedUser") |>
pull(siteUrl) |>
map_dfr(get_site_metrics)
A teď už jen vyfiltruju a zobrazím (opět anonymizovaně) weby, které nemají žádné imprese.
|>
all_site_metrics filter(impressions == 0) |>
mutate(site = anonymize_site(site))
site clicks impressions ctr position
1 http://anonymized.com/ 0 0 0 0
2 http://anonymized.net/ 0 0 0 0
3 https://anonymized.cz/ 0 0 0 0
4 http://anonymized.sk/ 0 0 0 0
5 sc-domain:anonymized.com 0 0 0 0
6 https://anonymized.com/ 0 0 0 0
7 https://anonymized.cz/ 0 0 0 0
8 http://anonymized.com/ 0 0 0 0
Pokud je chci ze Search Console odebrat, udělám to podle návodu pro neautorizované weby výše.
A to je všechno :-)