Merancang dasbor untuk situs web analitik e-commerce Bagian 3: Saluran SEO

Pada artikel ini, kami akan mengumpulkan dasbor untuk analisis lalu lintas SEO. Kami akan membongkar data melalui skrip python dan melalui file .csv.

Apa yang akan kami bongkar?


Untuk menganalisis dinamika posisi frasa pencarian, Anda harus membongkar dari Yandex.Webmaster dan Google Search Console . Untuk menilai "kegunaan" memompa posisi frasa pencarian, data frekuensi akan berguna. Mereka dapat diperoleh dari Yandex.Direct dan Google Ads . Nah, untuk menganalisis perilaku sisi teknis situs, kami akan menggunakan Page Speed ​​Insider .


Dinamika lalu lintas SEO

Konsol pencarian Google


Untuk berinteraksi dengan API, kami akan menggunakan perpustakaan searchconsole . Github menjelaskan secara rinci cara mendapatkan token yang diperlukan untuk masuk. Prosedur untuk mengunggah data dan memuatnya ke dalam database MS SQL adalah sebagai berikut:

def google_reports(): #     account = searchconsole.authenticate(client_config=r'credentials.json' , credentials=r'cred_result.json') webproperty = account['https://test.com/'] #        , ,      report = webproperty.query.range('today', days=-10).dimension('country', 'device', 'page', 'query').get() now = datetime.now() fr = now - timedelta(days = 9) to = now - timedelta(days = 3) res = pd.DataFrame(columns=['dt_from', 'dt_to', 'country', 'device', 'page', 'query', 'clicks', 'impressions', 'position']) #    DataFrame      for i in report.rows: temp={} temp['country'] = i[0] temp['device'] = i[1] temp['page'] = i[2] temp['query'] = i[3] temp['clicks'] = i[4] temp['impressions'] = i[5] temp['position'] = i[7] temp['dt_from'] = fr.strftime("%Y-%m-%d") temp['dt_to'] = to.strftime("%Y-%m-%d") res = res.append(temp, ignore_index=True) to_sql_server(res, 'google_positions') 

Yandex.Webmaster


Sayangnya, Webmaster hanya dapat mengunggah 500 frasa pencarian. Unggah potongan menurut negara, jenis perangkat, dll. dia juga tidak bisa. Karena pembatasan ini, selain mengunggah posisi untuk 500 kata dari Webmaster, kami akan mengunggah data dari Yandex.Metrica ke halaman arahan. Bagi mereka yang tidak memiliki banyak frasa pencarian, 500 kata akan cukup. Jika inti semantik Anda menurut Yandex cukup lebar, Anda harus menurunkan posisi dari sumber lain atau menulis parser posisi Anda.

 def yandex_reports(): token = "..." #  UserID url = "https://api.webmaster.yandex.net/v4/user/" headers = {"Authorization": "OAuth " + token} res = requests.get(url, headers=headers) a = json.loads(res.text) userId = a['user_id'] host_id = "https:test.com:443" #  500        res = requests.get(url+str(userId)+"/hosts/"+host_id+"/search-queries/popular/?order_by=TOTAL_SHOWS&query_indicator=TOTAL_SHOWS", headers=headers) df1 = pd.DataFrame(columns=['query_id', 'query_text', 'shows', 'dt_from', 'dt_to']) a = json.loads(res.text) for i in a['queries']: temp={} temp['query_id'] = i['query_id'] temp['query_text'] = i['query_text'] temp['shows'] = i['indicators']['TOTAL_SHOWS'] temp['query_text'] = i['query_text'] temp['dt_from'] = a['date_from'] temp['dt_to'] = a['date_to'] df1 = df1.append(temp, ignore_index=True) #  500        res = requests.get(url+str(userId)+"/hosts/"+host_id+"/search-queries/popular/?order_by=TOTAL_SHOWS&query_indicator=TOTAL_CLICKS", headers=headers) df2 = pd.DataFrame(columns=['query_id', 'clicks']) a = json.loads(res.text) for i in a['queries']: temp={} temp['query_id'] = i['query_id'] temp['clicks'] = i['indicators']['TOTAL_CLICKS'] df2 = df2.append(temp, ignore_index=True) #  500        res = requests.get(url+str(userId)+"/hosts/"+host_id+"/search-queries/popular/?order_by=TOTAL_SHOWS&query_indicator=AVG_SHOW_POSITION", headers=headers) df3 = pd.DataFrame(columns=['query_id', 'position']) a = json.loads(res.text) for i in a['queries']: temp={} temp['query_id'] = i['query_id'] temp['position'] = i['indicators']['AVG_SHOW_POSITION'] df3 = df3.append(temp, ignore_index=True) df1 = df1.merge(df2, on='query_id') df1 = df1.merge(df3, on='query_id') to_sql_server(df1, 'yandex_positions') 

Insider Kecepatan Halaman


Memungkinkan Anda untuk mengevaluasi kecepatan pengunduhan konten situs. Jika situs mulai memuat lebih lambat, maka ini dapat secara signifikan mengurangi posisi situs dalam hasil pencarian.

 #  -50      conn = pymssql.connect(host=host,user=user,password=password) sql_string = r''' ;with a as( select distinct page, sum(clicks) as clicks from seo_google_positions group by page ) select top 50 page from a order by clicks desc ''' data = pd.read_sql(sql_string, conn) conn.close() #        dat = pd.DataFrame(columns=['first_cpu_idle', 'first_contentful_paint', 'page', 'dt']) for i, j in data.iterrows(): url = "https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url={0}&category=performance&strategy=desktop".format(j[0]) res = requests.get(url) res = json.loads(res.text) temp = {} temp['first_cpu_idle'] = res['lighthouseResult']['audits']['first-cpu-idle']['displayValue'] temp['first_contentful_paint'] = res['lighthouseResult']['audits']['first-contentful-paint']['displayValue'] temp['page'] = j[0] temp['dt'] = now.strftime("%Y-%m-%d") dat = dat.append(temp, ignore_index = True) to_sql_server(dat, 'google_pagespeed') 

Google Ads dan Yandex Direct


Untuk memperkirakan frekuensi permintaan pencarian, kami menurunkan frekuensi inti SEO kami.


Prakiraan anggaran Yandex


Perencana Kata Kunci Google

Metrik Yandex


Unggah data pada tampilan dan kunjungan ke halaman login dari traffic SEO.

 token = token headers = {"Authorization": "OAuth " + token} now = datetime.now() fr = (now - timedelta(days = 9)).strftime("%Y-%m-%d") to = (now - timedelta(days = 3)).strftime("%Y-%m-%d") res = requests.get("https://api-metrika.yandex.net/stat/v1/data/?ids=ids&metrics=ym:s:pageviews,ym:s:visits&dimensions=ym:s:startURL,ym:s:lastsignSearchEngine,ym:s:regionCountry,ym:s:deviceCategory&date1={0}&date2={1}&group=all&filters=ym:s:lastsignTrafficSource=='organic'&limit=50000".format(fr,to), headers=headers) a = json.loads(res.text) re = pd.DataFrame(columns=['page', 'device', 'view', 'dt_from', 'dt_to', 'engine', 'visits', 'country', 'pageviews']) for i in a['data']: temp={} temp['page'] = i['dimensions'][0]['name'] temp['engine'] = i['dimensions'][1]['name'] temp['country'] = i['dimensions'][2]['name'] temp['device'] = i['dimensions'][3]['name'] temp['view'] = i['metrics'][0] temp['visits'] = i['metrics'][1] temp['pageviews'] = i['metrics'][0] temp['dt_from'] = fr temp['dt_to'] = to re=re.append(temp, ignore_index=True) to_sql_server(re, 'yandex_pages') 

Akuisisi Data dalam Power BI


Mari kita lihat apa yang berhasil kami bongkar:

  • google_positions dan yandex_positions
  • google_frequency dan yandex_frequency
  • google_speed dan yandex_speed
  • yandex_metrika

Dari data ini kita akan dapat mengumpulkan dinamika per minggu, berdasarkan segmen, data umum berdasarkan segmen dan permintaan, dinamika dan data umum berdasarkan halaman dan kecepatan unduh konten. Seperti inilah bentuk laporan akhir:



Di satu sisi, ada banyak tanda berbeda dan sulit untuk memahami apa tren umum. Di sisi lain, setiap pelat menampilkan data penting tentang posisi, tayangan, klik, RKT, kecepatan pemuatan halaman.

Artikel dari siklus:

Source: https://habr.com/ru/post/id467019/


All Articles