# www.websiteboosting.com / Patrik Luerwer & Mario Fischer # Codebeispiel fuer R - Website Boosting Ausgabe 67 # Aus der Serie "R Leuchtungen", Teil 6 # Alle Zeilen, die mit # beginnen, dienen nur der Erklaerung # und werden von R ignoriert. # Hinweis. Die zwei nachfolgenden Librarys muessen einmalig installiert # werden. Wie das geht, steht im Heft! Danach kann man die beiden Zeilen loeschen. # Achtung: Wenn Sie die vorherigen Teile unserer Serie noch nicht # durchgespielt haben, müssen Sie die Librarys einmalig für R installieren. # Dazu entfernen Sie die beiden Doppelkreuze vor "instal....". # R wird dann ggf. nochmal neu starten wollen. Ist halt so. # Anschließend können Sie die # wieder vorne anstellen, sonst werden die immer # wieder installiert. Das ist lästig. Es geht auch einfacher, mehr dazu im Heft! # install.packages("tidyverse") # install.packages("janitor ") # Nachfolgended werden die installierten Librarys in den Speicher von R geladen: library(tidyverse) library(janitor) # Screaming Frog Dateien einlesen internal_all <- read_csv("internal_all.csv", locale = locale(decimal_mark = ",")) %>% clean_names() all_inlinks <- read_csv("all_inlinks.csv", col_types = cols(.default = "c")) %>% type_convert() %>% clean_names() # Nur solche URLs behalten, die HTML und indexierbar sind internal_all_indexable <- internal_all %>% filter(indexability == "Indexable", str_detect(content_type, "html")) # Berechnen, welche identischen Anker auf verschiedene URLs zeigen different_anchors_per_url <- all_inlinks %>% filter( source != destination, # Aller Verlinkungen einer Seite auf sich selbst entfernen, da das in der Regel Sprungmarken-Links sind !is.na(anchor) # Leere Anker-Texte entfernen - bspw. von Bildverlinkungen ) %>% semi_join(internal_all_indexable, by = c("destination" = "address")) %>% # Nur die Zeilen behalten, bei denen die verlinkte URL eine indexierbare HTML-URL ist group_by(anchor) %>% mutate(n_url = n_distinct(destination)) %>% # Anzahl der verlinkten URLs je Anker zählen ungroup() %>% filter(n_url > 1) %>% # Nur solche Zeilen behalten, bei denen die Anzahl der URLs je Anchor größer 1 ist select(anchor, n_url, destination, source) %>% # Nur die benötigten Spalten behalten distinct() %>% # Doppelte Einträge durch Mehrfachverlinkungen von einer Seite entfernen arrange(desc(n_url), destination) # Google SearchConsole-Daten an den Dataframe schreiben, wenn sie vorhanden sind if ("clicks" %in% names(internal_all_indexable)) { different_anchors_per_url <- different_anchors_per_url %>% left_join(internal_all_indexable %>% # GSC-Daten an den DataFrame schreiben select(address, destination_clicks = clicks, # Spalten umbedennen, damit ersichtlich ist, dass sich die Clicks etc. auf die destination beziehen destination_impressions = impressions, destination_ctr = ctr, destination_position = position), by = c("destination" = "address")) %>% arrange(desc(n_url), destination, desc(destination_clicks)) } # Grafik plotten bzw. erzeugen different_anchors_per_url %>% distinct(anchor, n_url) %>% mutate(anchor = case_when(str_length(anchor) >= 30 ~ str_replace(anchor, "(.{0,30}).*", "\\1[...]"), # Sehr lange Ankertexte kürzen TRUE ~ anchor)) %>% ggplot(aes(n_url, reorder(anchor, n_url))) + geom_col() + labs(title = "Wie viele URLs werden mit dem Anker ... verlinkt?", x = "URLs", y = NULL) # Grafik im Arbeitsverzeichnis speichern als png ggsave("anker_anzahl_urls.png") # CSV-Export der Übersicht: Verlinkte URLs je Ankertext different_anchors_per_url %>% distinct(across(-source)) %>% write_excel_csv2("verlinkte_urls_je_anker.csv", na = "") # CSV-Export der Übersicht: Verlinkte URL je Anker und verlinkende URL write_excel_csv2(different_anchors_per_url, "verlinkte_urls_je_anker_und_verlinkende_seite.csv", na = "") ### Ende des des Skrips ### Für weitere Infos siehe Beitrag im Heft