Ca webmaster sau specialist SEO, realizarea de audituri de backlink-uri este o parte esentiala a strategiei SEO. Pentru a pastra clasamentul site-ului tau ridicat si pentru a preveni potentialele penalizari, este important sa identifici si sa stergi backlink-urile toxice. Totusi, exportarea manuala si corelarea tuturor datelor din Google Search Console poate fi extrem de dificila.
Pentru site-uri mai mari, volumul mare de date poate face ca procesul de exportare al datelor din GSC sa devina o abordare consumatoare de timp si deloc practica. Din fericire, exista o solutie – web scraping-ul. Prin utilizarea unui scraper web, poti extrage si analiza eficient datele din din GSC, permitandu-ti sa identifici rapid si sa stergi link-urile daunatoare.
O metoda eficienta de a extrage backlink-uri din GSC este sa folosesti Python, un limbaj de programare popular pentru dezvoltarea web si analiza datelor. Cu Python, poti utiliza biblioteca BeautifulSoup pentru a parsa HTML-ul si a extrage informatii relevante de pe paginile web.
Google Search Console – Sectiunea Linkuri
Pentru a incepe, va trebui sa instalezi mai multe pachete folosind pip: bs4, requests, re, pandas, si csv. Aceste pachete vor oferi functionalitatea esentiala pentru web scraping si manipularea datelor in Python.
pip install bs4 requests re pandas csv
1. Emulati o sesiune de utilizator
Pentru a incepe sa obtii informatii despre backlink-urile din Google Search Console, trebuie sa simulezi o sesiune normala de utilizator. Acest lucru se poate face deschizand sectiunea Link-uri in GSC printr-un browser web si selectand sectiunea Top linking sites. Odata ce ajungi in aceasta sectiune, va trebui sa faci click dreapta si sa alegi „Inspect” pentru a vizualiza sursa paginii.
Next, navigate to the network tab within the browser’s dev tools and select the first URL that appears as a document type. This should be a request on a URL that follows this format: https://search.google.com/search-console/links?resource_id=sc-domain%3A{YourDomainName}
Click pe URL si cauta in tab-ul „Headers” sectiunea „Request Headers”, asa cum este aratat in imaginea de mai jos:
Pentru a emula cu succes o sesiune normala de utilizator, va trebui sa includem informatiile din header in solicitarile noastre Python.
Este important de mentionat ca header-ul contine si informatii despre cookie-uri, care in biblioteca requests din Python vor fi stocate intr-un dictionar numit cookies. Restul informatiilor din header vor fi stocate intr-un dictionar numit headers.
Practic, luam informatiile din header si cream doua dictionare, dupa cum urmeaza in codul de mai jos. Nu uita sa inlocuiesti [your-info] cu datele tale reale.
din bs4 import BeautifulSoup import requests import re import pandas as pd import csv headers = { "authority": "search.google.com", "method":"GET", "path":'"[informațiile tale]"', "schema":"https", "accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*; q=0.8,application/signed-change;v=b3;q=0.9", "accept-encoding":"gzip, deflate, br", "accept-language":"en-GB,en-US;q= 0.9,en;q=0.8,ro;q=0.7", "cache-control":"no-cache", "pragma":"no-cache", "sec-ch-ua":"navigate", " sec-fetch-site":"same-origin", "sec-fetch-user":"?1", "upgrade-insecure-requests":"1", "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, ca Gecko) Chrome/100.0.4896.127 Safari/537.36", "x-client-data":"[informațiile tale]", "sec-ch-ua":'" Nu este A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"', "sec-ch -ua-mobile": "?0", "sec-fetch-dest": "document", "sec-fetch-mode": "navigate" } cookie-uri = { "__Secure-1PAPISID":"[informațiile tale]", "__Secure-1PSID":"[informațiile tale]", "__Secure-3PAPISID":"[informațiile tale]", "__Secure-3PSID":"[informațiile tale]", "__Secure-3PSIDCC":"[informațiile tale]", "1P_JAR":"[informațiile tale]", "NID":"[informațiile tale]", "APISID":"[informațiile tale]", "CONSENT":"[informațiile tale]", "HSID":"[informațiile tale]", "SAPISID":"[informațiile tale]", "SID":"[informațiile tale]", "SIDCC":"[informațiile tale]", "SSID":"[informațiile tale]", "_ga":"[informațiile tale]", "OTZ":"[informațiile tale]", "OGPC":"[informațiile tale]"
}
Informatia din header afisata poate varia in functie de cazul tau specific. Nu te ingrijora daca sunt diferente, atata timp cat poti genera cele doua dictionare necesare.
Dupa ce ai completat acest pas, executa celula care contine informatiile despre header si cookie-uri, deoarece este momentul sa treci la prima parte a script-ului propriu-zis: colectarea unei liste cu domeniile de referinta care link-uiesc inapoi la site-ul tau.
Nu uita sa inlocuiesti [your-domain] cu domeniul tau real.
genericURL = "https://search.google.com/search-console/links/drilldown?resource_id=[domeniul-dvs.]&type=EXTERNAL&target=&domain=" req = requests.get(genericURL, headers=headers, cookies=cookies) supa = BeautifulSoup(req.content, 'html.parser')
URL-ul furnizat mai sus este pentru sectiunea „Top linking sites”. Asigura-te ca il actualizezi cu URL-ul corespunzator site-ului tau.
Pentru a verifica daca ai reusit sa ocolesti cu succes logarea, poti testa ruland urmatorul cod:
g_data = soup.find_all("div", {"class": "OOHai"}) de exemplu în g_data: print(example) break
Codul de mai sus ar trebui sa produca un element cu clasa „00Hai”. Daca poti vedea acest element, atunci poti continua.
2. Genereaza o lista de domenii de referinta
Urmatorul pas in acest proces va implica utilizarea Python si Pandas pentru a genera o lista cu toate domeniile de referinta.
g_data = soup.find_all("div", {"class": "OOHai"}) dfdomains = pd.DataFrame() finalList = [] for externalDomain in g_data: myList = [] out = re.search(r'<div class="OOHai">(.*?(?=<))', str(externalDomain))
if out:
myList.append(out.group(1))
finalList.append(myList)
dfdomains = dfdomains.append(pd.DataFrame(finalList, columns=["External Domains"]))
domainsList = dfdomains["External Domains"].to_list()
Codul furnizat mai sus initializeaza un DataFrame Pandas gol, care va fi ulterior populat cu domenii externe. Scriptul functioneaza scanand intregul cod HTML si identificand toate elementele cu clasa „OOHai”. Daca sunt gasite astfel de elemente, DataFrame-ul "dfdomains" va fi populat cu numele domeniilor externe.
3. Extrage backlink-urile pentru fiecare domeniu
Pe masura ce avansam, vom extrage informatiile despre backlink-uri pentru toate domeniile, inclusiv cele mai importante site-uri care au link catre pagina ta si cele mai relevante link-uri (care corespund celui de-al treilea nivel de date din GSC, luand doar prima valoare).
def extractBacklinks(): pentru domeniul din domainsList[:]: url = f"https://search.google.com/search-console/links/drilldown?resource_id=[domeniul-dvs.]&type=EXTERNAL&target={domain}&domain=" request = requests.get(url, headers=headers, cookies=cookies) supa = BeautifulSoup(request.content, 'html.parser') pentru rândul din soup.find_all("div" , {"class": "OOHai"}): output = row.text stripped_output = output.replace("", "") domain_stripped = str(domain.split('https://')[1]. split('/')[0]) print ("---------") print ("Domeniu: " + domeniu) print ("---------") url_secondary = f „https://search.google.com/search-console/links/drilldown?resource_id=[domeniul-dvs.]&type=EXTERNAL&target={domain}&domain={stripped_output}" request_secondary = requests.get(url_secondary, headers=headers, cookies=cookies) soup_secondary = BeautifulSoup(request_secondary.content, 'html.parser') pentru rândul din soup_secondary.find_all( "div", {"class": "OOHai"}): output_last = row.text stripped_output_last = output_last.replace("", "") break with open(f"{domain_stripped}.csv", "a" ) ca fișier: writer = csv.writer(file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) writer = writer.writerow([domain, stripped_output, stripped_output_last]) file.close() extractBacklinks ()
Pentru a rezolva problema caracterelor ciudate returnate de Beautiful Soup, utilizam metoda "replace" din Python pentru a le elimina.
Odata ce extractia URL-urilor este completa, toate URL-urile vor fi adaugate intr-un fisier .csv, care va fi plasat in acelasi director cu scriptul.
Cod complet
from bs4 import BeautifulSoup
import requests
import re
import pandas as pd
import csv
headers = {
"authority": "search.google.com",
"method":"GET",
"path":'"[your-info]"',
"scheme":"https",
"accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"accept-encoding":"gzip, deflate, br",
"accept-language":"en-GB,en-US;q=0.9,en;q=0.8,ro;q=0.7",
"cache-control":"no-cache",
"pragma":"no-cache",
"sec-ch-ua":"navigate",
"sec-fetch-site":"same-origin",
"sec-fetch-user":"?1",
"upgrade-insecure-requests":"1",
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36",
"x-client-data":"[your-info]",
"sec-ch-ua":'" Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"',
"sec-ch-ua-mobile": "?0",
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate"
}
cookies = {
"__Secure-1PAPISID":"[your-info]",
"__Secure-1PSID":"[your-info]",
"__Secure-3PAPISID":"[your-info]",
"__Secure-3PSID":"[your-info]",
"__Secure-3PSIDCC":"[your-info]",
"1P_JAR":"[your-info]",
"NID":"[your-info]",
"APISID":"[your-info]",
"CONSENT":"[your-info]",
"HSID":"[your-info]",
"SAPISID":"[your-info]",
"SID":"[your-info]",
"SIDCC":"[your-info]",
"SSID":"[your-info]",
"_ga":"[your-info]",
"OTZ":"[your-info]",
"OGPC":"[your-info]"
}
genericURL = "https://search.google.com/search-console/links/drilldown?resource_id=[your-domain]&type=EXTERNAL&target=&domain="
req = requests.get(genericURL, headers=headers, cookies=cookies)
soup = BeautifulSoup(req.content, 'html.parser')
g_data = soup.find_all("div", {"class": "OOHai"})
for example in g_data:
print(example)
break
g_data = soup.find_all("div", {"class": "OOHai"})
dfdomains = pd.DataFrame()
finalList = []
for externalDomain in g_data:
myList = []
out = re.search(r'<div class="OOHai">(.*?(?=<))', str(externalDomain))
if out:
myList.append(out.group(1))
finalList.append(myList)
dfdomains = dfdomains.append(pd.DataFrame(finalList, columns=["External Domains"]))
domainsList = dfdomains["External Domains"].to_list()
def extractBacklinks():
for domain in domainsList[:]:
url = f"https://search.google.com/search-console/links/drilldown?resource_id=[your-domain]&type=EXTERNAL&target={domain}&domain="
request = requests.get(url, headers=headers, cookies=cookies)
soup = BeautifulSoup(request.content, 'html.parser')
for row in soup.find_all("div", {"class": "OOHai"}):
output = row.text
stripped_output = output.replace("", "")
domain_stripped = str(domain.split('https://')[1].split('/')[0])
print ("---------")
print ("Domain: " + domain)
print ("---------")
url_secondary = f"https://search.google.com/search-console/links/drilldown?resource_id=[your-domain]&type=EXTERNAL&target={domain}&domain={stripped_output}"
request_secondary = requests.get(url_secondary, headers=headers, cookies=cookies)
soup_secondary = BeautifulSoup(request_secondary.content, 'html.parser')
for row in soup_secondary.find_all("div", {"class": "OOHai"}):
output_last = row.text
stripped_output_last = output_last.replace("", "")
break
with open(f"{domain_stripped}.csv", 'a') as file:
writer = csv.writer(file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
writer = writer.writerow([domain, stripped_output, stripped_output_last])
file.close()
extractBacklinks()
Concluzie Finala
Web scraping-ul este o tehnica puternica ce poate fi utilizata pentru a extrage date valoroase din Google Search Console. Folosind Python si biblioteci precum BeautifulSoup si Pandas, poti colecta eficient informatii despre backlink-uri pentru site-ul tau. Desi procesul poate parea complex la inceput, urmand pasii descrisi mai sus poti simplifica procesul de auditare a backlink-urilor si asigura performanta SEO pentru site-ul tau. Prin utilizarea acestei tehnici, poti identifica usor backlink-uri toxice si sa iei masurile necesare pentru a le sterge, imbunatatind astfel clasamentul general si performanta site-ului tau.