Čístím Search Consoli od zbytečných webů

Jako každý SEO konzultantant mám v Google Search Consoli plno webů, ke kterým už nemám přístup, nebo které už dlouho nefungují. Napsal jsem si skript v R, který je odstraní.

Author
Affiliation
Marek Prokop
Published

April 10, 2022

Příprava

Skriptu stačí tyhle dva balíčky.

library(tidyverse)
library(searchConsoleR)

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.

websites <- list_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).

unverified_websites <- 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.

get_site_metrics <- function(site) {
  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ěží.

all_site_metrics <- websites |> 
  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 :-)