Python ile Site İçi Seo Analizi

Python ile SEO için yapabildiklerinizi öğrendikçe şaşıracaksınız. Analizlerinizde özgürlüğün tadını çıkaracaksınız. Python kullanarak web sitelerinizi tarayabilir ve verilerinizi işleyebilirsiniz . Bu rehberde PyCharm geliştirme ortamıyla birlikte advertools ve pandas kütüphanelerini kullanacağız. Bu basit rehber pythonu biraz kurcalamış, başlangıç seviyesinde bilgisi olanlar içindir.

Python İle Web Sitesi Nasıl Taranır?

Web sitelerini tarayabilmek için Advertools kütüphanesini çalışmamıza dahil edelim ve ilk tarama kodlarımızı çalıştırarak üzerinde çalışacağımız verilerimizi oluşturalım.

from advertools import crawl
crawl('https://www.sozcu.com.tr/', 'sozcu-500.jl', follow_links=True,
          custom_settings={'CLOSESPIDER_PAGECOUNT': 500,
                           'CONCURRENT_REQUESTS_PER_DOMAIN': 1,})
Python İle SEO Taraması

Sozcu sitesinin 500 adet sayfasını tarayıp bunun üzerinde analizlere devam edeceğiz. Siteyi komple taramak uzun süreceğinden dolayı “CLOSESPIDER_PAGECOUNT’: 500,” değeri ile 500 sayfa taraması gerçekleştiğinde örümceğimiz duracaktır. “CONCURRENT_REQUESTS_PER_DOMAIN’: 1,” değeri ile örümceğimiz yavaş davranacaktır. Sozcu sunucularından engellenmek veya yük bindirmek istemeyiz bu yüzden olabildiğince yavaş tarama yapacağız.

“follow_links=True” değeri ile örümceğimiz sayfalarda keşfettiği linkleri takip ederek taramayı genişleterek ilerleyecektir.

Taramamızı başlatalım, taramamız bittiğinde verilerimize göz atalım.

Python İle Web Tarama Sonrası Veriler

Advertools sadece bununla kalmıyor dilerseniz xpath ve CSS üzerinden belirlediğiniz alanları verilerinize dahil ederek örümceğimizin özel taramalar yapmasını sağlayabiliyorsunuz. Bu tamamen sizin yaratıcılığınıza kalmış bir durum. Yazımızın ilerleyen kısımlarında bunun için bir örnek yapacağız.

Python İle Verileri İşleme

Bu kısımdan sonrası pandas ile verilerimizi ayıklayarak topladığımız verileri inceleyeceğiz. İlk önce kütüphanemizi çalışmamıza dahil edelim.

import pandas as pd

Topladığımız verilerin sütunlarına göz atalım. Hangi veriler üzerinde işlemler yapabiliriz bakalım.

sozcu = pd.read_json('sozcu-500.jl', lines=True)
print(sozcu.columns)
ÇIKTI:
,url,title,meta_desc,viewport,charset,h2,h3,canonical,alt_href,og:image,og:image:width,og:image:height,og:title,og:description,jsonld_@context,jsonld_@type,jsonld_url,jsonld_sameAs,jsonld_contactPoint,jsonld_logo.@type,jsonld_logo.url,jsonld_logo.width,jsonld_logo.height,jsonld_1_@context,jsonld_1_@type,jsonld_1_url,jsonld_1_potentialAction.@type,jsonld_1_potentialAction.target,jsonld_1_potentialAction.query-input,body_text,size,download_timeout,download_slot,download_latency,depth,status,links_url,links_text,links_nofollow,img_src,img_alt,ip_address,crawl_time,resp_headers_date,resp_headers_content-type,resp_headers_x-ua-compatible,resp_headers_x-gd,resp_headers_cache-control,resp_headers_vary,resp_headers_x-proxy-cache,resp_headers_device,resp_headers_x-proxy-ecache,resp_headers_server,resp_headers_x-proxy-edge,resp_headers_via,resp_headers_x-region,resp_headers_x-cdn-cache-id,resp_headers_x-cdn-cache-status,resp_headers_alt-svc,request_headers_accept,request_headers_accept-language,request_headers_user-agent,request_headers_accept-encoding,request_headers_referer,h1,og:url,og:type,twitter:card,twitter:image,twitter:site,twitter:title,twitter:description,jsonld_itemListElement,jsonld_1_sameAs,jsonld_1_contactPoint,jsonld_1_logo.@type,jsonld_1_logo.url,jsonld_1_logo.width,jsonld_1_logo.height,jsonld_2_@context,jsonld_2_@type,jsonld_2_url,jsonld_2_potentialAction.@type,jsonld_2_potentialAction.target,jsonld_2_potentialAction.query-input,jsonld_3_@context,jsonld_3_@type,jsonld_3_headline,jsonld_3_name,jsonld_3_articleBody,jsonld_3_articleSection,jsonld_3_datePublished,jsonld_3_dateModified,jsonld_3_genre,jsonld_3_wordCount,jsonld_3_inLanguage,jsonld_3_typicalAgeRange,jsonld_3_keywords,jsonld_3_description,jsonld_3_mainEntityOfPage.@type,jsonld_3_mainEntityOfPage.@id,jsonld_3_image.@type,jsonld_3_image.url,jsonld_3_image.height,jsonld_3_image.width,jsonld_3_author.@type,jsonld_3_author.name,jsonld_3_publisher.@type,jsonld_3_publisher.name,jsonld_3_publisher.logo.@type,jsonld_3_publisher.logo.url,jsonld_3_publisher.logo.width,jsonld_3_publisher.logo.height,resp_headers_etag,jsonld_4_@context,jsonld_4_@type,jsonld_4_name,jsonld_4_description,jsonld_4_thumbnailUrl,jsonld_4_uploadDate,jsonld_4_duration,jsonld_4_contentUrl,jsonld_4_embedUrl,jsonld_4_publisher.@type,jsonld_4_publisher.name,jsonld_4_publisher.logo.@type,jsonld_4_publisher.logo.url,jsonld_4_publisher.logo.width,jsonld_4_publisher.logo.height,jsonld_3_url,jsonld_3_itemListElement,jsonld_mainEntityOfPage,jsonld_headline,jsonld_articleBody,jsonld_articleSection,jsonld_datePublished,jsonld_dateModified,jsonld_description,jsonld_genre,jsonld_inLanguage,jsonld_author.@type,jsonld_author.name,jsonld_publisher.@type,jsonld_publisher.name,jsonld_publisher.logo.@type,jsonld_publisher.logo.url,jsonld_publisher.logo.width,jsonld_publisher.logo.height,jsonld_image.@type,jsonld_image.url,jsonld_image.height,jsonld_image.width,jsonld_1_itemListElement,jsonld_2_sameAs,jsonld_2_contactPoint,jsonld_2_logo.@type,jsonld_2_logo.url,jsonld_2_logo.width,jsonld_2_logo.height,jsonld_3_potentialAction.@type,jsonld_3_potentialAction.target,jsonld_3_potentialAction.query-input,errors

Karmaşık görünüyor olabilir ama sadece görünüyor. Neler yapabiliriz hadi beraber bakalım.

Python İle Başlık, Açıklama Ve URL Analizi

SEO için oldukça önemli olan başlık, meta açıklama ve url kullanımlarımızı ölçümleyeceğiz. Eksik ve uzun başlıklar, uzun meta açıklamaları, ortalama karakter kullanımı, başlık ve URL’lerde kullanılan kelime sayıları gibi bir çok örnek yapacağız.

60 Karakterden Uzun Başlıklar Nasıl Bulunur?

sozcu = pd.read_json('sozcu-500.jl', lines=True)

sozcuf = (sozcu[sozcu['title'].str.len() > 60].url.to_frame())
sozcuf.to_csv('60-karakterden-uzun-basliklar.csv')

Veri kaynağımızı ekledik. İçerisinden filtremize uygun verileri ayıkladık ve bunların URL’lerini csv dosyası olarak farklı bir dosyaya yazdırdık. “60-karakterden-uzun-basliklar.csv” dosyamızı açalım ve içeriğine göz atalım.

“60-karakterden-uzun-basliklar.csv” Dosyamızın İçeriği

Verilerimizin doğruluğu kontrol edelim. Anasayfa için 60 karakterden uzun başlık kullanılmış olarak gözüküyor, bakalım.

Sözcü Sitesinin Anasayfa “Title” Kaynak Kodu
Google İndex Hali

Sözcü sitesi anasayfasında 72 karakter uzunluğunda başlık kullanmış. Python ile bu ve bunun gibi 60 karakterden uzun başlık barındıran sayfalarin URL’lerini kaydettik.

160 Karakterden Uzun Meta Açıklamaları Nasıl Bulunur?

sozcu = pd.read_json('sozcu-500.jl', lines=True)

sozcuf = (sozcu[sozcu['meta_desc'].str.len() > 160].url.to_frame())
sozcuf.to_csv('160-karakterden-uzun-aciklamalar.csv')

Burada yaptığımız bir üst kısımda bulunan başlıkları bulurken yaptığımız ile aynı. ‘meta_desc’ sütununda bulunan verilere bakıp 160 karakterden uzun olan sayfa URL’lerinin çıktısını aldık.

“160-karakterden-uzun-aciklamalar.csv” Dosyamızın İçeriği

Verilerin doğruluğunu kontrol etmek için ilk URL’in kaynak kodlarından meta açıklamasına göz atalım.

350 Karakterlik Meta Açıklaması
Google İndex Hali

75 Karakterden Uzun URL’ler Nasıl Bulunur?

sozcu = pd.read_json('sozcu-500.jl', lines=True)

sozcuf = (sozcu[sozcu['url'].str.len() > (75+25)].url.to_frame())
sozcuf.to_csv('75-karakterden-uzun-URL.csv')

Burada sözcü sitesinin “https://www.sozcu.com.tr/” 25 karakterden oluşan alan adını saymasını istemiyorum. Bu yüzden “str.len() > (75+25)” bu şekilde kullandım. Belirlediğimiz koşulu yerine getiren sorgumuzun sonucunu csv olarak kaydettik. “75-karakterden-uzun-URL.csv” dosyamızı açarak 75 karakterden uzun tüm URL’leri görebiliriz.

Başlık, Açıklama ve URL’lerin Ortalama Karakter Sayısı Nasıl Bulunur?

#dosya okuma
sozcu = pd.read_json('sozcu-500.jl', lines=True)

#ortalama verilerini ekrana basma
print(('Başlıklarda ortalama'), (sozcu['title'].str.len().mean()), ('karakter kullanılmış.'))
print(('Meta açıklamalarda ortalama'), (sozcu['meta_desc'].str.len().mean()), ('karakter kullanılmış.'))
Çıktı: 
Başlıklarda ortalama 101.48832684824903 karakter kullanılmış. 
Meta açıklamalarda ortalama 196.083984375 karakter kullanılmış.

Örnekleri istediğiniz gibi çoğaltabilirsiniz. Son örnek olarak URL uzunluklarının ortalamasını alalım ve ekrana yazdıralım.

print(('URLleriniz ortalama'), (sozcu['url'].str.len().mean()), ('karakterden oluşuyor.'))
Çıktı: 
URLleriniz ortalama 83.75533980582524 karakterden oluşuyor.

Başlık ve URL’lerin Kelime Sayıları Nasıl Bulunur?

Başlıkların kaç kelimeden oluştuğunu python ile öğrenebiliriz.

sozcu = pd.read_json('sozcu-500.jl', lines=True)

sozcu['baslik_kelime_sayisi'] = sozcu['title'].str.count(' ')
sozcu.filter(['baslik_kelime_sayisi', 'url']).to_csv('baslik-kelime-sayilari.csv')

Başlık uzunluklarımızı sorgulayıp csv çıktısı olarak kaydettik. baslik-kelime-sayilari.csv dosyamızdan verilerimizi kontrol edebiliriz.

Aynı uygulama ile URL’lerin kaç kelimeden oluştuğunu öğrenelim. Fakat bu sefer “str.count(‘ ‘)” boşluklar yerine ‘-‘ ile ayıklama yapmamız gerekir.

sozcu = pd.read_json('sozcu-500.jl', lines=True)


sozcu['url_kelime_sayilari'] = sozcu['url'].str.count('/') -3 +sozcu['url'].str.count('-')
sozcu.filter(['url_kelime_sayilari', 'url']).to_csv('URL-kelime-sayilari.csv')

Haber sitelerinin URL yapılarında tarih ve kategoriler yer aldığı için ‘/’ taksim isaretinide ölçüm için işleme dahil ettik. Çıkan sonuçtan 3 çıkardık çünkü verilerimizde bulunan https://www.sozcu.com.tr/ adresinin taksimlerinide sayıyordu. Geriye kalan kısımları ‘-‘ ile saydıktan sonra dosyamıza bastırdık. Taradığınız sitenin yapısına göre verilerimizi ayıklamamız gerekir. Aksi taktirde yanlış sonuçlar elde edebiliriz.

Python İle Site İçerisinde Sık Kullanılan Kelimeler Nasıl Bulunur?

Python ile sitede kullanılan kelimeleri analize alabiliyoruz. Bu analiz sonucu yazarlar için “şu kelimeyi sık kulanıyorsun biraz azalt istersen” gibi söylemlere gidebilir dikkat lütfen 🙂 Şimdi gelelim sözcü sitesinin tarama yaptığımız saylarinda en sık kullanılan kelimelerini bulmaya.

Başlıklarda Sık Kullanılan Kelimeleri Bulma

sozcu = pd.read_json('sozcu-500.jl', lines=True)

title_words = str(sozcu['title'].tolist())\
    .replace("-","")\
    .replace("@@socialfacebook@@socialtwitter@@socialwhatsapp@@aplus@@aminus@@envelope","")\
    .replace('@@social-facebook@@social-twitter@@social-whatsapp@@aplus@@aminus@@envelope','')\
    .replace('@@socialfacebook@@socialtwitter@@aplus@@aminus@@envelope@@printer','')\
    .replace('–','')\
    .replace('bir','')\
    .replace('|','')\
    .replace('…','')

sozcuf = adv.word_frequency(title_words, rm_words=adv.stopwords['turkish'])
sozcuf.to_csv('kelimeler.csv')

“.replace” ile bul ve değiştir yaparak gereksiz verilerden kurtulduk. Haber sitesinin gereksiz ve hatalı verileri ayıkladım. Sizinde verilerinize göre düzenleme yapmanız gerekebilir. Elde ettiğim dosya çıktısı şu şekilde.

“kelimeler.csv” dosya içeriği.

Bunlar tek kelimelerden oluşuyor. Eğer iki kelimelik sık kullanılan kombinasyonları görmek istiyorsak;

sozcu = pd.read_json('sozcu-500.jl', lines=True)

baslik_kelimeleri = str(sozcu['title'].tolist())\
    .replace("-","")\
    .replace("@@socialfacebook@@socialtwitter@@socialwhatsapp@@aplus@@aminus@@envelope","")\
    .replace('@@social-facebook@@social-twitter@@social-whatsapp@@aplus@@aminus@@envelope','')\
    .replace('@@socialfacebook@@socialtwitter@@aplus@@aminus@@envelope@@printer','')\
    .replace('–','')\
    .replace('bir','')\
    .replace('|','')\
    .replace('…','')

sozcuf = adv.word_frequency(baslik_kelimeleri, rm_words=adv.stopwords['turkish'], phrase_len=2)
sozcuf.to_csv('kelimeler2.csv')

Bu kısımda kullandığımız kodlar üstte bulunan kodlarla aynı, değişiklikleri görebilmeniz için kodları kalınlaştırdım. Sonrasında en sık kullanılan ikili kelime kombinasyonlarını “kelimeler2.csv” isimli dosyaya kaydettim, içeriği şu şekilde;

“kelimeler2.csv” dosyamızın içeriği.

phrase_len=2” yerine 3 değerini verirsek sık kullanılan üçlü kelime kombinasyonlarını elde etmiş oluruz.

URL’lerde Sık Kullanılan Kelimeleri Bulma

sozcu = pd.read_json('sozcu-500.jl', lines=True)

url = str(sozcu['url'].tolist())\
    .replace("-"," ")\
    .replace("https://www.sozcu.com.tr/","")\
    .replace("/"," ")\
    .replace("utm_source=ilgili_haber&utm_medium=free&utm_campaign=", "")\
    .replace("utm_source=yazardetay&utm_medium=free&utm_campaign=","").replace("_"," ")


sozcuf = adv.word_frequency(url, rm_words=adv.stopwords['turkish'], phrase_len=1)
sozcuf.head(50).to_csv('url-kelime.csv')
  • .replace(“-“,” “) ile URL’lerimizde bulunan – leri boşluklar ile değiştirdik.
  • .replace(“https://www.sozcu.com.tr/”,””) ile domainimizi verilerimizden tamamen kaldırdık.
  • .replace(“/”,” “) taksim işaretini boşluk olarak değiştirdik.
  • .replace(“utm_source=ilgili_haber&utm_medium=free&utm_campaign=”, “”)\ .replace(“utm_source=yazardetay&utm_medium=free&utm_campaign=”,””).replace(“_”,” “) bu iki satır verilerimde bulunan hatalı kısımlar, bunlarıda verilerimizden kaldırdık.

Sonuç olarak URL’lerimizi bu yapıdan “https://www.sozcu.com.tr/2021/dunya/trumpla-ilgili-cok-konusulacak-iddia-corona-olanlari-guantanamoya-gondermek-istemis” şu yapıya çevirdik “2021 dunya trumpla ilgili cok konusulacak iddia corona olanlari guantanamoya gondermek istemis”. Verilerimizin ilk 50 satırını “url-kelime.csv” olarak kaydettik.

“url-kelime.csv” dosya içeriği.

Sık kullanılan iki kelimelik kombinasyonları bulmak için “phrase_len=1” değerini 2 yapmamız gerekir. Aynı şekilde 3 ve 4 değerleri ile istediğimiz kelime kombinasyonlarını elde edebiliriz.

İçeriklerde Sık Kullanılan Kelimeleri Bulma

Çalışmamız haber sitesi üzerinden devam edecek. Bu taramada haber içeriklerinin bulunduğu kısımları CSS yardımı ile tarayıp analiz edeceğiz.

Burada ilk yapmamız gereken haber yazılarının hangi CSS’ler arasında kullanıldığını bulmak. “<p> … </p>” etiketleri arasında kalan kısımlar bizim istediğimiz kısımlar bu nedenle sözcü sitesinin “.content-element p” elementini taramaya eklememiz yeterli olacaktır.

CSS = {
    'icerik':'.content-element p'
}
crawl('https://www.sozcu.com.tr/2021/dunya/trumpla-ilgili-cok-konusulacak-iddia-corona-olanlari-guantanamoya-gondermek-istemis-6498893/',
      'sozcu-icerik.jl',follow_links=False,
      css_selectors=CSS)

sozcu = pd.read_json('sozcu-icerik.jl', lines=True)
sozcui = sozcu['icerik']
sozcui.to_csv("haber-icerik.csv")
  • Sözcü sitesinin paragraf kısımlarının CSS kodlarını öğrendik ve bunları ‘icerik’ isimli sütunumuza kaydetmesi için CSS isimli bir değişkene atadık.
  • Örümceğimiz web sitesinden aldığı verileri sozcu-icerik.jl dosyasına kaydetmesini söyledik.
  • Zamandan tasarruf etmek amaçlı bir adet url üzerinde işlem yapacağım. Bu nedenle örümceğimize “follow_links=False” değeri ile URL’leri takip etmemesini söyledik.
  • “icerik” sütunumuzu “haber-icerik.csv” dosyası olarak kaydettik.
“haber-icerik.csv” dosya içeriği.

Elimizde haber yazılarının verileri mevcut. Şimdi bunları yukarıda uyguladığımız metodoloji ile sık kullanılan kelimeleri bulalım. Bunun için;

sozcu = pd.read_json('sozcu-icerik.jl', lines=True)

icerik = str(sozcu['icerik'].tolist())


sozcuf = adv.word_frequency(icerik, rm_words=adv.stopwords['turkish'], phrase_len=1)
sozcuf.head(50).to_csv('icerik-kelime.csv')

Python İle Canonical Etiket Analizi

sozcu = pd.read_json('sozcu-500.jl', lines=True)

sozcuc = sozcu[sozcu['canonical'] != sozcu['url']].filter(['url', 'canonical'])
sozcuc.to_csv("canonical.csv")

Eşit olmayan sayfa içerisinde bulunan canonical etiketlerinin URL’ler ile eşit olup olmadığını sorgulattık. Daha sonra eşit olmayanları “canonical.csv” dosyamıza yazdırdık. Dosya içeriğimize göz atalım.

“canonical.csv” dosya içeriği.

Sözcü sitesinin ana sayfasında canonical etiketinin farklı kullanıldığını görüyoruz.

Canonical etiketleri hakkında bilgi edinmek için Canonical etiketi nedir? Neden kullanılır? başlıklı yazıma göz atabilirsiniz.

Python İle Sayfa Boyutları Grafiğe Nasıl Dökülür?

Bu kısımda cufflinks kütüphanesinden yararlanarak verilerimizi grafiğe dökeceğiz.

import plotly.graph_objects as go

Kütüphaneyi çalışmamıza dahil ettik. Şimdi tarayıcımız üzerinden sayfa boyutlarımızın grafiğini görüntüleyeceğiz.

sozcu = pd.read_json('sozcu-500.jl', lines=True)

veri = [go.Bar(x=sozcu['url'], y=sozcu['size'])]
gr = go.Layout(title='Sayfa Boyutları', height=600, width=1500)
grafik = go.Figure(data=veri, layout=gr)
grafik.show()

Kodumuzu çalıştırdığımızda bizi tarayıcıya yönlendirecektir.

Sayfaların Boyut Aralıklarına Göre Grafik Oluşturma

Boyut aralıklarını ve o aralıklarda kaç adet sayfa olduğunu gösteren grafiğimizi oluşturmak için alt kısımda bulunan kod bloğunu kullanabilirsiniz.

sozcu = pd.read_json('sozcu-500.jl', lines=True)

fig = go.Figure()
fig.add_histogram(x=sozcu['size'])
fig.layout.title='Boyut Aralıkları Göre Sayfa Sayıları'
fig.layout.paper_bgcolor='#E5ECF6'
fig.show()

Boyut aralıklarını gördüğümüz grafiği baz alarak 100k ile 210k arasında boyutlara sayfaların çıktısını almak için işlem yapalım. Bu sayfaların az boyutta olmasının nedenlerine göz atmak için bu işlemi yapıyorum. Aynı şekilde ortalamanın yüksek olduğu sayfalar varsa bunlarında çıktısını alarak neden boyutları yüksek diye göz atabiliriz.

sozcu = pd.read_json('sozcu-500.jl', lines=True)

sozcuB = sozcu[(sozcu['size'] > 10000) & (sozcu['size'] < 210000)][['url', 'size']]
sozcuB.to_csv("100k-210k-boyuta-sahip-sayfalar.csv")

Python İle Yapılandırılmış Veri Analizi

Sözcü sitesinde taradığımız sayfalarda kaç adet, hangi yapılandırılmış veri var ilk önce bunlara göz atalım.

sozcu = pd.read_json('sozcu-500.jl', lines=True)

print(sozcu['jsonld_@type'].value_counts())
ÇIKTI:
BreadcrumbList    506
Article             2
Organization        1

Çıktımızda gözüktüğü üzere taradığımız tüm sayfalarda breadcrumb yapılandırılmış veri gözüküyor. Bunun haricinde 2 adet makale ve 1 adet organizasyon şeması mevcutmuş.

Tüm şemalara göz atmak istersek;

sozcu = pd.read_json('sozcu-500.jl', lines=True)


sozcu = sozcu.loc[:, sozcu.columns.str.contains('json')]
sozcu.to_csv("yapılandırılmış-veriler.csv")

Python İle Yinelenen H1, H2, H3 Başlık Analizi

Yinelenen içerikler sıralama sorunlarına neden olabiliyor. Çok iyi analiz edilmeli ve gerekli optimizasyonlar uygulanmalıdır. H1, H2, H3 etiketlerinde birebir uyuşan yinelenen başlıklar var mı diye kontrol sağlayacağız. Sizde bu yöntem ile analiz etmek istediğiniz bölümleri inceleyebilir, dilediğiniz gibi özelleştirebiliriz.

Birebir eşleşme sağlamak için value_counts() fonksiyonunu kullancağız.

sozcu = pd.read_json('sozcu-500.jl', lines=True)

print(sozcu['h1'].value_counts().head(5))

Verilerimizde bulunan <h1>…</h1> etiketleri birebir eşleşenlerle karşılaştırdık ve head(5) ile ilk 5 satırı ekrana yazdırdık. Tüm yinelenen h1 etiketlerin çıktısını almak için;

sozcuY = sozcu['h1'].value_counts()
sozcuY.to_csv('yinelenen-h1.csv')
“yinelenen-h1.csv” dosya içeriği.

Aynı metodoloji ile h2, h3 gibi etiketlere uygulayarak analizi gerçekleştirebiliriz.

Python İle Çok Sayıda H1 Kullanan Sayfalar Nasıl Bulunur?

Sayfalarımızda h1 etiketini bir çok kez kullanıyorsak bunların optimize edilmesi gerekir. H2, H3, H4 kullanımı içeriğinizle alakalı olarak dilediğiniz kadar kullanılabilir. Burada yapacağımız sayfalarımızda iki veya daha fazla h1 etiketi kullanan URL’lerin tespiti ve çıktısının alınması.

sozcu = pd.read_json('sozcu-500.jl', lines=True)

sozcuh1 = sozcu[sozcu['h1'].str.contains('@@', na=False)]['url']
sozcuh1.to_csv('2-veya-daha-fazla-h1-kullanan-sayfalar.csv')
‘2-veya-daha-fazla-h1-kullanan-sayfalar.csv’ dosya içeriği.

Sonuç

Bir web sitesin başlık, açıklama ve URL’lerin kontrolunu yaptık, kelime analizi, yinelenen içerik analizi, canonical ve yapısal verilerin kullanımını analiz ettik. Bu başlangıç Python’da kendi web tarama ve analiz aracımızı yazmaya kadar gidebilir.

Yardımcı Kaynaklar;

  • https://www.holisticseo.digital/python-seo/crawl-analyse-website/
  • https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_excel.html
  • https://advertools.readthedocs.io/en/master/advertools.spider.html
  • https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.duplicated.html
  • https://plotly.com/python/getting-started/