PageSpeed Insights API, Google tarafından sağlanan ve web sitelerinin sayfaları için ücretsiz şekilde sayfa açılış hızı performansının toplu şekilde izlenmesine imkan sağlayan api’dır. Pagespeed api kullanılarak web sayfalarının pagespeed verileri ve bu verileri iyileştirmeye yönelik öneriler toplu şekilde çekilebilir. Pagespeed api verileri kullanılarak özel data grafikleri, 3.cü parti araçlar, özel kullanıcı deneyimi tablo ve panoları oluşturulabilir.
Bu makale içerisinde paylaşacağımız Python scripti ile toplu şekilde Pagespeed insights api’a istek gönderecek ve core web vitals tarafında mutlaka izlenmesi gereken temel metrikler (LCP, CLS, FID) ve pagespeed genel (lab data) skorumuzu sayfa bazlı olarak alacağız. Yine aynı script içerisinde Api’dan JSON olarak aldığımız verileri csv yada excel dokümanına dökerek kullanmak üzere bir çıktı alacağız.
PageSpeed Insights Api Nasıl Çalışır ?
Pagespeed insights api’da istek gönderilen bir web sayfası için pagespeed skoru (json.lighthouseResult.categories.performance.score) sayfayla ilgili lab (simule edilen ortam) verilerini analiz etmek için Lighthouse çalıştırılarak belirlenir. Pagespeed aracında (https://pagespeed.web.dev/) olduğu gibi pagespeed api’da da istek gönderilen web sayfasına ait pagespeed skoru için lighthouse çalıştırılır.
Eğer istek gönderilen web sayfası için reel kullanıcı verileri oluşmuşsa yani web sayfasına yeterince gerçek kullanıcı ziyareti gerçekleştirilip bu veriler Google tarafından toplanıp işlenmişse yine pagespeed api içerisinden bu veriler alınabilir. İlgili verilerin oluşmadığı durumda metrik verileri alınamaz (ilgili alanlar yanıt json’ı içinde boş gelir).
Pagespeed insights api’ın yanıt json’ları içerisinden web sayfalarına ait açılış hızı skorları alınabildiği gibi ilgili skorları geliştirmeye yönelik önerilerde alınabilir. Örnek: json.lighthouseResult.audits[‘offscreen-images’] ile ekran dışındaki resimlerin ertelenmesi ile alakalı öneriler (varsa) alınabilir.
Pagespeed insights api’a çeşitli programlama dilleri kullanılarak istekler gönderilebilir. Örneğin Python yada Javascript kullanılarak herhangi bir veya birden fazla web sayfası için istek gönderilebilir.
Pagespeed api kullanabilmek için mutlaka istek gönderilecek web sayfası (domain) ile alakalı api key Google’dan https://developers.google.com/speed/docs/insights/v5/get-started bu link kullanılarak edinilmelidir. Burada edilinilecek key yazının devamında kurulum işleminde (kod içerisinde) kullanılacaktır.
Pagespeed Api Script’i ile Bakacağımız Metrikler Nelerdir?
Aşağıda oluşturacağımız PageSpeed api script’i ile Google’ın core web vitals adını verdiği sıralama metriklerinden olan LCP, CLS, FID ve bu 3 metriğe ek olarak FCP ile genel pagespeed skorlarımıza bakacağız.
Core web vitals nedir? core web vitals metrikleri nelerdir? bilgi almak için ilgili makalemizi ziyaret edebilirsiniz.
Python ile PageSpeed Api Kullanımı
Bir web sitesine ait birden çok URL’in performans metriklerini ölçümlemek için manuel olarak harcanan zamandan tasarruf etmek için aşağıdaki Python scriptini kullanabilirsiniz.
Ekteki script bir web sitesinin sitemap’inde yer alan URL’leri kullanarak Google’ın pagespeed Api’ına istek gönderir ve ilgili URL ile alakalı lab data (pagespeed) verilerini json yanıtı olarak alır. Bu api kullanılarak elde edilen metrikler ile Pagespeed ve Lighthouse araçlarında skorlar aynıdır. Bu dataların tamamı lab (sahte bir yükleme ortamı simule edilerek) oluşturulmaktadır.
Ekteki scriptin çalıştırılabilmesi için bilgisayarınızda Python 3 kurulu olmalı ve bir code editor / ide aracılığı ile ilgili kodları çalıştırmalısınız. Bilgisayarınızda local olarak çalıştırabilirisiniz.
Bu scripti kurmak ve çalıştırmak için gereken adımları inceleyelim ;
1 – Gerekli Modülleri ve Paketleri Kuralım
Herhangi bir kod yazmaya başlamadan önce, scripti kullanabilmemiz için gerekli olan bazı Python paketlerini kurmamız gerekiyor. Pythonda import özelliği kullanılarak paketleri ve modülleri kolayca çalışma dosyasınıza alabilirsiniz.
Aşağıda yer alan kodu sağlıklı bir şekilde çalıştırabilmek için aşağıdaki paketler yüklenmelidir:
- Advertools: Site haritasında yer alan URL’leri dataframe’e çevirip Python da kullanabilmek için bu paketi yüklemeliyiz.
- Pandas: Genel olarak veri analizi ve manipülasyonu için kullanılır, Pandas’ı dataframe oluşturmak ve oluşturduğumuz sözlüğü excele yazmak için kullanacağız.
- Requests: Site haritasından alacağımız URL’lere istek atmak için kullanacağımız HTTP kütüphanesi. Bu paket ile Python kullanarak HTTP istekleri oluşturabileceğiz.
- Datetime: Python içerisinde zaman ile alakalı verileri oluşturmak için kullanılır. Bu script içerisinde scripti çalıştırdığımız tarihi çekmek için bu paketi (modülü) kullanacağız.
- Json: Bir JSON dosyasını Python’a veya bir Python dosyasını JSON’a dönüştürmemize olanak tanıyan paket (modül). Api’dan gelen yanıtları işlemek için bu paketi kullanacağız.
Scriptin en üstüne aşağıda yer alan importları ekleyelim ;
import advertools as adv
import pandas as pd
import requests
import json
from datetime import datetime
2 – Pagespeed Api Key’imizi Alalım
Pagespeed api nasıl çalışır bölümünde belirttiğimiz gibi Google’ın pagespeed insights api’ını kullanabilmek için mutlaka https://developers.google.com/speed/docs/insights/v5/get-started bu sayfa üzerinde üstteki görselde de görebileceğiniz “Anahtar Alın” butonuna tıklayarak API key almalıyız.
İlgili butona tıklayıp gerekli adımları tamamladıktan sonra aldığımız api key’i kod içerisinde rahatça kullanabilmek için bu key’i bir değişkene atayalım:
api_key = 'api keyiniz buraya gelecek' ('' arasına)
3 – Bugünün Tarihini Bir Değişken Olarak Tutalım
Script içerisinde scriptin çalıştığı günü code çıktısında kullanmak üzere bir değişken olarak tutalım.
Bunun için en üstte import ettiğimiz datetime paketinin datetime modülünü kullanacağız.
date = datetime.now().strftime("%d_%m_%Y")
İlk olarak bu kodu yazarak scriptin çalıştırıldığı günü date değişkeni içerisinde tutuyoruz. (gün-ay-yıl) formatında.
4 – Sözlük (Dict) Oluşturalım
dataları tutmak ve excel çıktısında kullanmak üzere bir adet dictionary (dict veri tipi) oluşturalım:
sozluk = dict()
4.1 – Api’dan Aldığımız Verileri Tutacağımız Keyleri Oluşturalım
sozluk['url'] = []
sozluk['fid'] = []
sozluk['lcp'] = []
sozluk['cls'] = []
sozluk['fcp'] = []
sozluk['performance_score'] = []
Bu bölümde oluşturduğumuz bu kod ile sözlük içerisinde api’dan aldığımız FID, LCP, CLS gibi verileri URL’lere karşılık gelecek şekilde tutacağız.
5 – Python ile Dolaşmak ve İstek Göndermek Üzere Site Haritasını Alalım
Sitemizin istek gönderilecek URL’lerini almak üzere site haritasını kullanabilir yada belirli bir URL grubu üzerinde çalışmak istiyorsanız ilgili URL grubunu bir dosya olarak açarak üzerinde dolaşabilirsiniz.
Bu script içerisinde biz site haritasında yer alan tüm indekslenebilir URL’lerin performansını görmek istediğimiz için site haritasını kullanacağız.
sitemap = adv.sitemap_to_df('https://www.dijitalzade.com/sitemap.xml')
sitemap_urls = sitemap['loc'].to_list()
Bu kod ile sitemizin site haritasını dataframe’e çevirip elde ettiğimiz çıktı içerisindeki ‘loc’ yani URL’leri üzerinde dolaşmak üzere list (liste veri tipi) haline getiriyoruz.
6 – Site Haritasında Dolaşma ve API isteği
for i in sitemap_urls:
req = requests.get(f"https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url={i}&strategy=mobile&locale=en&key={api_key}")
if req.status_code == 200:
json_data = json.loads(req.text)
sozluk['url'].append(i)
sozluk['fcp'].append(json_data["loadingExperience"]["metrics"]["FIRST_CONTENTFUL_PAINT_MS"]["percentile"])
# sozluk['fid'].append(json_data["loadingExperience"]["metrics"]["FIRST_INPUT_DELAY_MS"]["percentile"])
sozluk['fid'].append("-")
sozluk['lcp'].append(json_data["loadingExperience"]["metrics"]["LARGEST_CONTENTFUL_PAINT_MS"]["percentile"])
sozluk['cls'].append(json_data["loadingExperience"]["metrics"]["CUMULATIVE_LAYOUT_SHIFT_SCORE"]["percentile"] / 100)
sozluk['performance_score'].append(json_data["lighthouseResult"]["categories"]["performance"]["score"] * 100)
Bu kod bloğu ile yukarıda liste haline getirdiğimiz site haritasında yer alan URL’ler üzerinde bir döngü kurup req = request kodu ile API’a istek gönderiyoruz. Eğer gönderdiğimiz isteğin HTTP status code’u (Durum kodu) 200 ise yanıt olarak aldığımız JSON dosyasını json_data değişkenine atıyoruz.
Daha sonrasında istek olarak kullanılan URL’i sozluk içerisinde URL listesine, devamında gelen JSON dosyası içerisinde ihtiyaç duyduğumuz verileride sozluk içerisinde kendilerine karşılık gelen listelerin içerisine ekliyoruz. Bu uygulama ile URL’in verileri ile URL excelde aynı hizada olacak şekilde karşılıklı değişkenlerde tutulmuş oluyorlar.
json_data değişkeni içerisinden ihtiyaç duyduğumuz verileri almak için tipik Python dict veri tipinde key kullanımı yapıyoruz. İhtiyaç duyduğumuz verinin gelen JSON dosyası içerisindeki key’i ne ise onu [”] yapısı ile key olarak kullanarak alıyoruz ve kendisine karşılık gelen listenin içerisine append ediyoruz.
Önemli Not: Sitenizin istek gönderilen web sayfasının core web vitals verileri oluşmamış ise yada herhangi bir veri eksik ise bu kod çalıştırıldığında ilgili key boş olduğu için hata alırsınız. Bunu önlemek için Try – Except yapısı yada dict.get methodunu kullanabilirsiniz. Biz kodu daha basit tutmak adına bu şekilde ilerledik.
7 – Kod Çıktısını Excel Dosyasına Dökelim
df = pd.DataFrame.from_dict(sozluk)
writer = pd.ExcelWriter('pagespeed-verileri-'+date+'.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sitemap-pagespeed')
writer.save()
Bu kod ile üstte sozluk (dictionary) içerisine yazdığımız verileri pandas kullanarak dataframe’e dönüştürüyoruz ve dönüştürdüğümüz verileri pandas.ExcelWriter kullanarak xlsx formatındaki excel dosyamıza ekliyoruz. Kodun en başında oluşturduğumuz date değişkenini burada dosyanın adını tarihe göre otomatik olarak oluşturmak için kullanıyoruz.
Burada biz bu çalışma için excel kullandık ama siz tercihinize göre CSV kullanabilirsiniz. Python’ın gömülü modüllerinden csv’yi import ederek benzer şekilde final dosyanızı oluşturabilirsiniz.
Kodun Bütün Hali ve Editlenecek Alanlar
import advertools as adv
import pandas as pd
import requests
import json
from datetime import datetime
sozluk = dict()
date = datetime.now().strftime("%d_%m_%Y")
# Google'dan aldığınız api key'i '' arasına yazınız.
api_key = ''
sozluk['url'] = []
sozluk['fid'] = []
sozluk['lcp'] = []
sozluk['cls'] = []
sozluk['fcp'] = []
sozluk['performance_score'] = []
# kendi site haritanızın adresini buraya yazınız.
sitemap = adv.sitemap_to_df('https://www.dijitalzade.com/sitemap.xml')
sitemap_urls = sitemap['loc'].to_list()
for i in sitemap_urls:
req = requests.get(f"https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url={i}&strategy=mobile&locale=en&key={api_key}")
if req.status_code == 200:
json_data = json.loads(req.text)
sozluk['url'].append(i)
sozluk['fcp'].append(json_data["loadingExperience"]["metrics"]["FIRST_CONTENTFUL_PAINT_MS"]["percentile"])
# sozluk['fid'].append(json_data["loadingExperience"]["metrics"]["FIRST_INPUT_DELAY_MS"]["percentile"])
sozluk['fid'].append("-")
sozluk['lcp'].append(json_data["loadingExperience"]["metrics"]["LARGEST_CONTENTFUL_PAINT_MS"]["percentile"])
sozluk['cls'].append(json_data["loadingExperience"]["metrics"]["CUMULATIVE_LAYOUT_SHIFT_SCORE"]["percentile"] / 100)
sozluk['performance_score'].append(json_data["lighthouseResult"]["categories"]["performance"]["score"] * 100)
df = pd.DataFrame.from_dict(sozluk)
writer = pd.ExcelWriter('pagespeed-verileri-'+date+'.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sitemap-pagespeed')
writer.save()
Üst bölümde detaylandırdığımız kodun bütün hali üstte görebileceğiniz gibidir. Kod içerisindeki bölümlerin ne işe yaradığı gibi teknik detaylar ile ilgilenmiyorsanız direkt buradaki bütün kodu Python dosyanıza kopyalayıp yapıştırabilirsiniz.
Kopyalayıp yapıştırdıktan sonra api_key değişkenine api kodunuzu girmeyi ve sitemap bölümünde kendi sitenizin site haritasını kullanmayı unutmayın. Bu değişikleri yaptıktan sonra kodu direkt çalıştırıp excel çıktısını alabilirsiniz.
Kodun geri kalan bölümü değişkenleri otomatik kullanacak şekilde çalışmaktadır.