Blog Googlebot crawling aktivitás ellenőrzése Log File elemzéssel
googlebot log file elemzés
Írta:

Googlebot crawling aktivitás ellenőrzése Log File elemzéssel

Gyakran előfordul, hogy Googlebot aktivitást kell ellenőriznem egy-egy oldal esetében. Járt az adott oldalon a Googlebot? Mikor? Hányszor nézett meg egyes tartalmakat? És így tovább. Ennek az alapjait és hátterét foglaltam össze most egy rövid cikkben.

Főként weboldal migrációk esetében igazán hasznos a log fileok elemzése, vagy akár valamilyen technikai probléma során, amikor elkészül a hiba javítása.

Ugyanis az egy dolog, hogy „mi megcsináltunk” valamit, de kérdés, hogy a Google is látta-e ezt már?

A válasz pedig sok esetben az, hogy a többségnek fogalma sincs.

Többen használják már ilyen célra a GSC-t. A Google Search Console segítségével ugyanis is le lehet ellenőrizni sok mindent, és manuálisan néhány URL-t, de sokkal gyorsabb és hasznosabb, hogyha konkrét szerver log fájlokat nézzük meg ilyen esetben. Ebből ugyanis kiszedhető, hogy a Googlebot (vagy bármilyen más bot) milyen oldalakat mikor nézett meg.

Az ősidőkben maga az analitika is ilyen szerver log fájlokból dolgozott, aztán később vette át a helyét például a Google Analytics, amely már más megoldást használ az adatok begyűjtésére. A log fileok viszont nem tűntek el. Sőt, néha az az érzésem, hogy reneszánszukat élik. Csak nem itthon. De nemzetközi téren mindenképp.

Mire jó egy szerver log fájl?

Sok célra lehet használni egy szerver log filet. Ezek között vannak bőven SEO célok is:

  • nem érkezik-e indokolatlanul nagy forgalom az oldalra valamilyen forrásból?
  • nem áll-e az oldal terheléses támadás alatt?
  • milyen botok járnak az oldalon? ezek között vannak-e jótékonyak és kártékonyak is?
  • ha konkrétan a Googlebotot nézzük, akkor mikor és milyen tartalmakat nézett meg?
  • van-e olyan tartalom, amit én publikáltam, de a Google még nem látta?
  • van-e olyan tartalom, amit régen frissítettem, de a Google botja még nem látta az új verziót?

Megannyi kérdés merülhet fel, amelyek közül soknak van konkrétan keresőoptimalizálásra gyakorolt hatása. Ezért is van értelme foglalkozni a szerver log fájlokkal.

De mi is az a szerver log file?

A szerver log fájl egy automatikusan létrehozott fájl, amit a webszerver akkor rögzít, amikor valamilyen bot vagy felhasználó kapcsolatot létesít vele. Ezekben a fájlokban rögzítésre kerül, hogy ki, mikor és milyen tartalmat nézett meg.

Ezeket a log fileokat a tárhely szolgátatótól lehet lekérni. Van ahol ráadásul a CPanelen keresztül ezt te magad is meg el tudod érni. Itt egy konkrét példa: Adminisztráció / Log fájlok

Itt pedig a webszerver logokra van szükségünk.

Azon belül is a transfer logokra.

Ezeket letöltjük, majd egy logfájl elemző eszközzel végignézzük. Erre bármit lehet használni. Én a Screaming Frog Log File Analysert használom. Itt importálom az adatokat. És egyszerűen feltöltöm azokat a transfer logokat, amiket az imént letöltötem.

Itt pedig már egyből látszik, hogy melyik URL-t mikor nézte meg a Googlebot.

Milyen volt az aktivitás más botokhoz vagy felhasználókhoz képest:

Van amikor már ez önmagában óriási segítség. Hisz látod:

  • ki
  • mikor
  • mit nézett meg

A legjobb mégis az, amikor a log file-oket össze tudod vezetni a weboldal akutális állapotával, vagyis egy friss weboldal crawllal.

Ilyenkor párhuzamosan futtatsz egy Screaming Frog crawl, exportálod az Internal tabot.

Majd feltöltöd ezt az URL listát a log file analyzerbe.

És végül rászűrsz arra, hogy:

Melyik URL-ek azok, amik ugyan fent vannak a weboldaladon, de a Googlebot nem járt rajta!

Nem járt rajta mondjuk az elmúlt napokban, az elmúlt 1 hónapban, vagy akár még soha.

Ehhez persze az kell, hogy kellően hosszú időre visszamenőleg meglegyenek a log fileok, de a lehetőség adott az elemzésre.

Ezt követően pedig már manuálisan is tudod elemezni a listát Google Search Consoleban, hogy:

Ezeken az URL-eken tényleg nem vagy csak nagyon régen járt a Googlebot?

Itt egy konkrét URL Search Console Inspect adata, ami rajta van az oldalon, de a log fileokból hiányzik:

Vagyis ezt a cikket hiába publikáltam, a Google még nem is látta. Soha.

De olyan is előfordulhat, hogy valamit publikáltál, a Googlebot már látta. De mondjuk hónapokkal ezelőtt. És a legújabb verzióról még fogalma sincs.

Lehet persze aggregált adatok is nézni a crawl statisztikákra. Erre a jelenlegi (2020. augusztus) Search Console sajnos nem az igazi, de a régi legacy toolok között megtalálható ilyen eszköz: Legacy tools and reports / Crawl Stats

Nagy hátránya viszont, hogy GSC domain property esetében ez nem elérhető.

Ha viszont be van kötve prefix (tehát külön http vagy https) segítségével a domain, akkor úgy már meg lehet nézni ezeket az aggregált adatokat.

Ha pedig le akarod tölteni az összes adatot, akkor ezt a Javascript kódot használd bookmarkban.

javascript:(function()%7Bconst crawlGraphs %3D document.querySelectorAll(".hostload-activity script")%3B%0A%0Aconst isSafari %3D () %3D>%0A%09%2F%5E((%3F!chrome%7Candroid).)*safari%2Fi.test(navigator.userAgent)%3B%0A%0Aconst toCSV %3D (data%2C headers%2C separator%2C enclosingCharacter) %3D> %7B%0A%09return jsons2csv(data%2C headers%2C separator%2C enclosingCharacter)%3B%0A%7D%3B%0A%0Aconst isJsons %3D array %3D>%0A%09Array.isArray(array) %26%26%0A%09array.every(row %3D> typeof row %3D%3D%3D "object" %26%26 !(row instanceof Array))%3B%0A%0Aconst jsons2arrays %3D (jsons%2C headers) %3D> %7B%0A%09headers %3D headers %7C%7C jsonsHeaders(jsons)%3B%0A%0A%09%2F%2F allow headers to have custom labels%2C defaulting to having the header data key be the label%0A%09let headerLabels %3D headers%3B%0A%09let headerKeys %3D headers%3B%0A%09if (isJsons(headers)) %7B%0A%09%09headerLabels %3D headers.map(header %3D> header.label)%3B%0A%09%09headerKeys %3D headers.map(header %3D> header.key)%3B%0A%09%7D%0A%0A%09console.log(headerLabels)%3B%0A%09console.log(headerKeys)%3B%0A%0A%09const data %3D jsons.map(object %3D>%0A%09%09headerKeys.map(header %3D> getHeaderValue(header%2C object))%0A%09)%3B%0A%0A%09return %5BheaderLabels%2C ...data%5D%3B%0A%7D%3B%0A%0Aconst jsonsHeaders %3D array %3D>%0A%09Array.from(%0A%09%09array%0A%09%09%09.map(json %3D> Object.keys(json))%0A%09%09%09.reduce((a%2C b) %3D> new Set(%5B...a%2C ...b%5D)%2C %5B%5D)%0A%09)%3B%0A%0Aconst getHeaderValue %3D (property%2C obj) %3D> %7B%0A%09const foundValue %3D property%0A%09%09.replace(%2F%5C%5B(%5B%5E%5C%5D%5D%2B)%5D%2Fg%2C ".%241")%0A%09%09.split(".")%0A%09%09.reduce(function(o%2C p%2C i%2C arr) %7B%0A%09%09%09%2F%2F if at any point the nested keys passed do not exist%2C splice the array so it doesnt keep reducing%0A%09%09%09if (o%5Bp%5D %3D%3D%3D undefined) %7B%0A%09%09%09%09arr.splice(1)%3B%0A%09%09%09%7D else %7B%0A%09%09%09%09return o%5Bp%5D%3B%0A%09%09%09%7D%0A%09%09%7D%2C obj)%3B%0A%0A%09return foundValue %3D%3D%3D undefined %3F "" %3A foundValue%3B%0A%7D%3B%0A%0Aconst jsons2csv %3D (data%2C headers%2C separator%2C enclosingCharacter) %3D>%0A%09joiner(jsons2arrays(data%2C headers)%2C separator%2C enclosingCharacter)%3B%0A%0Aconst joiner %3D (data%2C separator %3D "%2C"%2C enclosingCharacter %3D '"') %3D> %7B%0A%09const output %3D data%0A%09%09.filter(e %3D> e)%0A%09%09.map(row %3D>%0A%09%09%09row%0A%09%09%09%09.map(element %3D> elementOrEmpty(element))%0A%09%09%09%09.map(%0A%09%09%09%09%09column %3D>%0A%09%09%09%09%09%09%60%24%7BenclosingCharacter%7D%24%7Bcolumn%7D%24%7BenclosingCharacter%7D%60%0A%09%09%09%09)%0A%09%09%09%09.join(separator)%0A%09%09)%0A%09%09.join(%60%5Cn%60)%3B%0A%0A%09return output%3B%0A%7D%3B%0A%0Aconst elementOrEmpty %3D element %3D> (element %7C%7C element %3D%3D%3D 0 %3F element %3A "")%3B%0A%0Aconst buildURI %3D (data%2C uFEFF%2C headers%2C separator%2C enclosingCharacter) %3D> %7B%0A%09const csv %3D toCSV(data%2C headers%2C separator%2C enclosingCharacter)%3B%0A%09const type %3D isSafari() %3F "application%2Fcsv" %3A "text%2Fcsv"%3B%0A%09const blob %3D new Blob(%5BuFEFF %3F "%5CuFEFF" %3A ""%2C csv%5D%2C %7B type %7D)%3B%0A%09const dataURI %3D %60data%3A%24%7Btype%7D%3Bcharset%3Dutf-8%2C%24%7BuFEFF %3F "%5CuFEFF" %3A ""%7D%24%7Bcsv%7D%60%3B%0A%0A%09return dataURI%3B%0A%7D%3B%0A%0A%2F%2F This texts the script tag from search console%0Afunction extractJSONDataFromGraphs(chartData) %7B%0A%09const extractJSON %3D new RegExp(%2FsetData%5C((%5B%5E%3B%5D%2B)%5C)%3B%2F%2C "i")%3B%0A%0A%09%2F%2F Extract the JSON from the string%0A%09const jsonStr %3D chartData.match(extractJSON)%5B1%5D%3B%0A%09%2F%2F const jsonStr %3D regexObj%5B1%5D%3B%0A%0A%09%2F%2F There are a bunch of raw dates in the output. Remove them.%0A%09const jsonStrSanitize %3D jsonStr.replace(%0A%09%09%2Fnew Date%5C(%5Cd%2B%2C%5Cd%2B%2C%5Cd%2B%5C)%2Fgi%2C%0A%09%09'"dateObj"'%0A%09)%3B%0A%0A%09%2F%2F Sanitize the JSON%0A%09const graphJSON %3D JSON.parse(jsonStrSanitize)%3B%0A%0A%09const headers %3D graphJSON.cols.map(colData %3D> %7B%0A%09%09let colKey %3D ""%3B%0A%0A%09%09%2F%2F Map for CSV output%0A%09%09if (colData.label %3D%3D%3D "Date") %7B%0A%09%09%09colKey %3D "date"%3B%0A%09%09%7D else %7B%0A%09%09%09colKey %3D "data"%3B%0A%09%09%7D%0A%0A%09%09return %7B key%3A colKey%2C label%3A colData.label %7D%3B%0A%09%7D)%3B%0A%0A%09const data %3D graphJSON.rows.map(rowData %3D> %7B%0A%09%09const date %3D rowData.c%5B0%5D.f%3B%0A%09%09const number %3D rowData.c%5B1%5D.v%3B%0A%0A%09%09return %7B date%3A date%2C data%3A number %7D%3B%0A%09%7D)%3B%0A%0A%09return %7B%0A%09%09headers%2C%0A%09%09data%0A%09%7D%3B%0A%7D%0A%0Agraphs %3D %5B"pages_crawled_per_day.csv"%2C "kb_downloaded_per_day.csv"%2C"time_spent_downloading_page.csv"%5D%0A%0A%2F%2F Loop over the graphs%0AcrawlGraphs.forEach((chart%2Ci) %3D> %7B%0A%09output %3D extractJSONDataFromGraphs(chart.text)%3B%0A%09dataURI %3D buildURI(output.data%2C "uFEFF"%2C output.headers%2C "%2C"%2C '"')%3B%0A%0A%09var link %3D document.createElement("a")%3B%0A%09link.setAttribute("href"%2C dataURI)%3B%0A%09link.setAttribute("download"%2C graphs%5Bi%5D)%3B%0A%09document.body.appendChild(link)%3B %2F%2F Required for FF%0A%0A%09link.click()%3B%0A%7D)%3B%7D)()%3B

Így pedig megkaphatod az elmúlt 90 nap crawl aktivitását egy csv-ben.

Hogyan tovább?

Ha érdekelnek a log file-ok vagy a Screaming Frog használata, akkor itt tudsz többet megtanulni róla:

Screaming Frog képzés

Ismerd meg Te is a Screaming Frog használatát!

Tanuld meg profi szinten használni a Screaming Frogot, ami az iparág vezető szoftvere. Nemcsak technikai SEO-ra, hanem tartalmi optimalizálásra vagy linképítésre is kiválóan alkalmas..

Képzés megtekintése

Ha pedig érdekelnek hasonló technikai megoldások és újdonságok, akkor gyere el a Digital Cube Confra, ahol egy előadás és egy workshop keretében is fogok ilyeneket mutatni:

  • Előadás: Mennyit ér a link, ha magyar? Linképítési és online PR esettanulmány a hazai piacról
  • Workshop: Működő SEO stratégiák a hazai piacon

Jegyek még elérhetőek korlátozott számban: https://thepitch.hu/digital-cube-conf/


Hozzászólások

Moderáld magad – vagy mi fogunk. :)
Na jó, nem fogunk, szóval csak ésszel!