Google Sızıntısı Sinyallerine Göre Site Denetimi Nasıl Yapılır?
SEO ve GEO Danışmanı | | 12 dk okuma

Google sızıntısı sinyallerine göre site denetimi, 2024 Content Warehouse sızıntısında adı geçen sinyallerin yaklaşık karşılıklarını kendi sayfalarınızda ölçen bir teknik SEO çalışmasıdır. Denetim site odağına, tekrar eden metne, tarihlere, başlıklara, önemli bilginin sayfadaki yerine bakar. Her ölçüm sitenizin bir kopyası üzerinde çalışan kısa bir Python betiğiyle (script) yapılır.
Google sızıntısı sinyallerine göre site denetimi nedir?
Google sızıntısı sinyallerine göre site denetimi, sızan her alanın HTML'inizde görünen karşılığını ölçen vekil ölçüler (proxy) bütünüdür. Sızan dosyalar Google'ın Content Warehouse uygulama programlama arayüzüne (API) ait belgelerdir. Belgelerde yaklaşık 2.596 modül ile 14.014 özellik (attribute) yer alır. Google'ın kod botu dosyaları yanlışlıkla herkese açık bir depoya ekledi, HexDocs da onları Mart 2024'te yayımladı. Sızıntı Mayıs 2024 sonunda gündeme geldi.
Dosyalar kaynak kod değil, protokol tamponu (protobuf) şemasıdır. Hangi alanın canlıda kullanıldığını, ağırlığını ya da eşiğini göstermez. Belgelerdeki en yeni tarih Ağustos 2023'tür. ABD Adalet Bakanlığı (DOJ), Google'a açtığı rekabet davasında Google mühendisi HJ Kim ile Şubat 2025'te yapılan görüşmenin notunu yayımladı. Notta belgelerin sıralama sisteminin bazı bileşenlerini adlandırdığı, eğrilerin ve eşiklerin ayrıntısına girmediği yazar.
Google sözcüsü Mayıs 2024'te bağlam dışı, eski ya da eksik bilgiye dayanan varsayımlara karşı uyardı. Ahrefs'ten Patrick Stox, bir özelliğin saklanıyor olmasının sıralamada kullanıldığı anlamına gelmediğini yazdı. Sızıntının ne olduğunu ve ne göstermediğini kurucusu olduğum rankZup'ın blogundaki Google algoritma sızıntısı yazısında anlattık. Denetim yine de işe yarar, çünkü her alan okur için düzeltebileceğiniz bir sayfa özelliğini gösterir.
Kendi sitenizde hangi Google sızıntısı sinyalleri ölçülebilir?
Kendi sitenizde sekiz grup Google sızıntısı sinyali, her biri için aynı özelliği sayfalarınızdan okuyan bir vekil ölçü kurularak ölçülebilir. Vekil ölçü, yalnız Google'ın görebildiği bir puanın yerine sizin hesapladığınız değerdir. Konu ölçüsü TF-IDF (terim sıklığı ile ters belge sıklığı) ağırlıklarını kullanır, öteki ölçüler düz sayımdır. Aşağıdaki tablo her grubu HexDocs'taki modülüyle, onu ölçen betikle eşleştirir.
| Sinyal | Modül | Vekil ölçü | Betik |
|---|---|---|---|
| siteFocusScore, siteRadius | QualityAuthorityTopicEmbeddingsVersionedItem | Site ortalamasına TF-IDF uzaklığı | yaricap.py |
| siteQualityStddev | QualityNsrNsrData | Sayfa başına özgün kelime dağılımı | sablon.py |
| OriginalContentScore | PerDocData | Başka sayfalarda da geçen cümlelerin oranı | sablon.py |
| unreliableDatesScore, semanticDate, lastSignificantUpdate | QualityTimebasedDateUnreliability, PerDocData | Sayfadaki üç tarihin karşılaştırması | tarihler.py |
| titlematchScore, Goldmine başlık adayları | QualityNsrNsrData, QualityPreviewRanklabTitle | Title ile H1'deki sorgu terimleri | basliklar.py |
| numTokens | DocProperties | İlk 100 kelimedeki sorgu terimleri | ilk100.py |
| avgTermWeight | DocProperties | Kalın yazılan gövde kelimelerinin oranı | ilk100.py |
| clutterScore | QualityNsrNsrData | Üçüncü taraf betik ile iframe sayısı | daginiklik.py |
Google sızıntısı denetimi için site nasıl hazırlanır?
Google sızıntısı denetimi için site, dizine eklenebilir sayfalar ile XML site haritası (sitemap) ve hedef sorgular tek bir çalışma klasöründe toplanarak hazırlanır. Klasörü aşağıdaki dört adımla kurun.
- Sayfaları aşağıdaki
wgetkomutuyla site adlı klasöre indirin. Komut eğik çizgiyle biten her adresi index.html olarak kaydeder. Statik sitede dosyaları kopyalamanız yeterlidir. - Site haritasını sitemap.xml adıyla kaydedin.
- Her sayfanın hedef sorgusunu anahtar kelime haritanızdan ya da Search Console'dan alıp sorgular.json dosyasına yazın:
{"/blog/ornek-yazi/": "örnek sorgu"}. - Aşağıdaki ortak.py dosyasını kaydedin, yazıdaki her betik onu kullanır.
wget --mirror --no-host-directories --directory-prefix=site --wait=1 \
--reject jpg,jpeg,png,gif,webp,svg,css,js,pdf https://example.com/
curl -L -o sitemap.xml https://example.com/sitemap.xml
# ortak.py: denetim betiklerinin ortak yardımcıları (örnek)
import html
import re
from pathlib import Path
# main_html, <main> (yoksa <body>) öğesini bu bloklar olmadan döndürür
DROP = r'(?is)<(script|style|nav|header|footer|aside|form)\b.*?</\1>'
def clean(fragment):
return ' '.join(html.unescape(re.sub(r'<[^>]+>', ' ', fragment)).split())
def main_html(source):
m = re.search(r'(?is)<main\b.*?</main>', source) or re.search(r'(?is)<body\b.*?</body>', source)
return re.sub(DROP, ' ', m.group(0) if m else source)
def first_tag(tag, source):
m = re.search(r'(?is)<%s\b[^>]*>(.*?)</%s>' % (tag, tag), source)
return clean(m.group(1)) if m else ''
def words(text):
# Türkçe küçük harf: İ -> i, I -> ı
return re.findall(r'\w+', text.replace('İ', 'i').replace('I', 'ı').lower())
def load_pages(folder='site'):
pages = {}
for f in sorted(Path(folder).rglob('*.html')):
rel = f.relative_to(folder).as_posix()
path = '/' + (rel[:-len('index.html')] if f.name == 'index.html' else rel)
src = f.read_text(encoding='utf-8', errors='replace')
main = main_html(src)
pages[path] = {'html': src, 'main': main, 'text': clean(main),
'title': first_tag('title', src), 'h1': first_tag('h1', src)}
return pages
Betikler sunucunun gönderdiği HTML'i okur. Metnini JavaScript ile oluşturan sayfalar için JavaScript'i çalıştıran bir tarama aracı gerekir.
Site odağı ve konu yarıçapı nasıl ölçülür?
Site odağı ile konu yarıçapı, her sayfa bir TF-IDF vektörüne çevrilip sitenin ortalama vektörüyle karşılaştırılarak ölçülür. Sızan belgelerdeki QualityAuthorityTopicEmbeddingsVersionedItem modülünde siteFocusScore alanı, bir sitenin tek konuya ne kadar odaklandığını gösteren sayı olarak tanımlanır. Aynı modüldeki siteRadius alanı, sayfa gömme vektörlerinin (embedding) site gömme vektöründen ne kadar saptığını ölçer. İki alanın da ağırlığı bilinmiyor, Google'ın gömme vektörleri de yayımlanmadı. TF-IDF vektörleri bu yüzden daha basit bir yedek olarak kullanılır.
# yaricap.py: her sayfanın site merkezine TF-IDF uzaklığı (örnek)
# uzaklık = 1 - kosinüs benzerliği; en uzak yüzde 5 yazdırılır
import math
from collections import Counter
from ortak import load_pages, words
pages = load_pages('site')
tf = {path: Counter(w for w in words(p['text']) if len(w) > 2) for path, p in pages.items()}
df = Counter(w for counts in tf.values() for w in counts)
n = len(tf)
def unit(vec):
norm = math.sqrt(sum(x * x for x in vec.values())) or 1.0
return {w: x / norm for w, x in vec.items()}
vec = {path: unit({w: c * math.log(n / df[w]) for w, c in counts.items()})
for path, counts in tf.items()}
centre = Counter()
for v in vec.values():
centre.update(v)
centre = unit(centre)
dist = {path: 1 - sum(x * centre.get(w, 0) for w, x in v.items()) for path, v in vec.items()}
mean = sum(dist.values()) / n
print(f'odak vekili {1 - mean:.3f} yarıçap vekili {mean:.3f}')
for path in sorted(dist, key=dist.get, reverse=True)[:max(1, round(n * 0.05))]:
print(f'{dist[path]:.3f} {path}')
İlk satır ortalama benzerliği odak vekili, ortalama uzaklığı yarıçap vekili olarak yazar. Sonraki satırlar site merkezine en uzak yüzde 5'lik aykırı sayfaları (outlier) listeler.
Her aykırı sayfayı ana konulardan birine bağlayıp güçlendirin. Hiçbir konuya uymayan, arama trafiği de almayan sayfayı en yakın sayfayla birleştirip 301 yönlendirmesi verin. Aykırı sayfaya link veren sayfaları, ayrı bir yazıda anlattığım Gephi ile iç link grafiği gösterir. Google'ın faydalı içerik rehberi benzer bir soru sorar: sitenizin birincil amacı veya odaklandığı bir konu var mı?
Şablon metin oranı nasıl ölçülür?
Şablon metin (boilerplate) oranı, bir sayfadaki cümlelerden kaçının sitenin en az bir başka sayfasında da geçtiği sayılarak ölçülür. PerDocData modülünde OriginalContentScore adında bir alan vardır. Açıklamaya göre bu alan yalnız az içerikli sayfalarda bulunur. Belgeler puanın nasıl hesaplandığını, nerede kullanıldığını açıklamaz.
# sablon.py: başka sayfalarda da geçen cümlelerin (6+ kelime) oranı,
# sayfa başına özgün kelime sayısının dağılımı (örnek)
import math
import re
from collections import Counter
from ortak import load_pages
pages = load_pages('site')
def sentences(text):
return {s.lower() for s in re.split(r'(?<=[.!?])\s+', text) if len(s.split()) >= 6}
sets = {path: sentences(p['text']) for path, p in pages.items()}
seen = Counter(s for group in sets.values() for s in group)
unique = {}
for path, group in sets.items():
ratio = sum(1 for s in group if seen[s] > 1) / len(group) if group else 0
unique[path] = sum(len(s.split()) for s in group if seen[s] == 1)
flag = 'şablon ağırlıklı' if ratio > 0.5 else ''
print(f'{ratio:.2f} ortak {unique[path]:4d} özgün kelime {path} {flag}')
mean = sum(unique.values()) / len(unique)
spread = math.sqrt(sum((x - mean) ** 2 for x in unique.values()) / len(unique))
print(f'sayfa başına özgün kelime: ortalama {mean:.0f}, standart sapma {spread:.0f}')
low = sorted(unique, key=unique.get)[:max(1, len(unique) // 10)]
print('en düşük %10:', ', '.join(low))
Cümlelerinin yarısından fazlası başka sayfalarda da geçen sayfayı betik şablon ağırlıklı diye işaretler. Tek şablondan üretilen şehir sayfaları, yalnız şehir adı değiştiğinde bu düzeye çıkar. Sayfaya yerel bir bilgi, tablo ya da örnek gibi yalnız o sayfaya ait bilgi ekleyin ya da sayfayı daha güçlü bir sayfayla birleştirin. Neredeyse aynı metni taşıyan kopyayı canonical etiketiyle ana sürüme bağlayın. Ana sürümün nasıl seçildiğini canonical adres seçimi yazımda anlattım.
Sayfalar arasındaki kalite dağılımı nasıl ölçülür?
Sayfalar arasındaki kalite dağılımı, sayfa başına özgün kelime sayısının standart sapmasıyla kaba bir vekil olarak ölçülür. Sızan QualityNsrNsrData modülündeki siteQualityStddev alanı, sitenin sayfa düzeyindeki sayfa kalitesi (PQ) puanlarının yayılımını tahmin eder. Kim notu Google'ın sayfa kalitesi sinyali Q*'ı büyük ölçüde statik, sorgudan çok siteyle ilgili bir sinyal olarak tanımlar.
Betiğin son iki satırı ortalamayı, standart sapmayı, en düşük yüzde 10'luk sayfaları yazar. Yüksek sapma zayıf sayfaların güçlü sayfaların yanında durduğunu gösterir. Önce bu grubu güçlendirin, birleştirin ya da noindex yapın. Bir sayfayı kaldırmadan önce arama trafiğine bakın.
Tarih sinyalleri nasıl karşılaştırılır?
Her sayfadaki tarih sinyalleri, görünür tarih ile yapılandırılmış veri (structured data) içindeki dateModified ve site haritasındaki lastmod yan yana konarak karşılaştırılır. PerDocData modülündeki semanticDate alanı, belgenin içeriğinden, ona verilen linklerin bağlantı metinlerinden (anchor), ilgili belgelerden tahmin edilen içerik tarihidir. Aynı modüldeki lastSignificantUpdate alanı belgenin son anlamlı güncellemesini tutar. QualityTimebasedDateUnreliability modülü adres başına bir unreliableDatesScore saklar.
Google'ın site haritası belgesi, lastmod değeri tutarlı ve doğrulanabilir biçimde doğruysa bu değeri kullandığını yazar. Değer sayfanın son önemli güncellemesini yansıtmalıdır. Belgedeki örneklerde ana içerikte, yapılandırılmış veride ya da linklerde yapılan güncelleme önemli sayılır, telif hakkı tarihindeki değişiklik sayılmaz.
# tarihler.py: görünür tarih, şemadaki dateModified, site haritasındaki lastmod (örnek)
import json
import re
import xml.etree.ElementTree as ET
from ortak import load_pages
SITE = 'https://example.com' # sitemap.xml dizin dosyasıysa alt site haritasını kullanın
NS = {'sm': 'http://www.sitemaps.org/schemas/sitemap/0.9'}
lastmod = {}
for url in ET.parse('sitemap.xml').getroot().findall('sm:url', NS):
loc = url.findtext('sm:loc', default='', namespaces=NS).strip()
lastmod[loc.replace(SITE, '', 1) or '/'] = url.findtext('sm:lastmod', default='', namespaces=NS).strip()[:10]
def schema_modified(src):
for block in re.findall(r'(?is)<script[^>]*application/ld\+json[^>]*>(.*?)</script>', src):
try:
data = json.loads(block)
except ValueError:
continue
for item in data if isinstance(data, list) else data.get('@graph', [data]):
if isinstance(item, dict) and item.get('dateModified'):
return item['dateModified'][:10]
return ''
for path, p in load_pages('site').items():
# görünür tarih: sayfadaki en yeni <time datetime="...">; temanıza göre uyarlayın
shown = sorted(re.findall(r'''<time[^>]*datetime=["']?([^"'\s>]+)''', p['html']))
found = {'görünür': shown[-1][:10] if shown else '',
'şema': schema_modified(p['html']), 'site haritası': lastmod.get(path, '')}
if len(set(found.values())) > 1:
print(path, found)
Betik yalnız üç değerin uyuşmadığı sayfaları yazar. Uyuşmazlık, kaynaklardan birinin ötekiler olmadan değiştiğini gösterir. Derleme tarihini dateModified alanına yazan bir şablon buna örnektir. Üç değeri de son anlamlı değişikliğin tarihinden alın. Yazım düzeltmesinden sonra tarihlere dokunmayın. Faydalı içerik rehberi, içerik önemli ölçüde değişmeden sayfayı güncel göstermek için tarih değiştirmeye karşı uyarır.
Title, H1 ve hedef sorgu nasıl karşılaştırılır?
Hedef sorgu ile title ve H1, sorgudaki terimlerin ne kadarının bu iki alanda geçtiği ölçülerek karşılaştırılır. QualityNsrNsrData modülündeki titlematchScore, sitenin başlıklarının kullanıcı sorgularıyla ne kadar eşleştiğini söyleyen site düzeyinde bir sinyaldir. QualityPreviewRanklabTitle modülü tek bir başlık adayını tanımlar. Modüldeki goldminePageScore alanı, adayın Goldmine adlı sistemde hesaplanan puanıdır. Aynı modüldeki queryMatchFraction alanı eşleşen sorgu terimlerini sorgudaki tüm terimlere böler, betiğin hesapladığı oran da budur.
Google'ın başlık bağlantısı belgesi, başlık bağlantılarının kaynakları arasında <title> öğesini, <h1> gibi başlık öğelerini, sayfadaki bağlantı metnini, sayfayı işaret eden linklerin metnini sayar.
# basliklar.py: hedef sorgu terimlerinin title ile H1'deki payı (örnek)
# kelimeler birebir eşleşir: "etiket" ile "etiketi" ayrı terim sayılır
import json
import re
from collections import Counter
from ortak import load_pages, words
pages = load_pages('site')
queries = json.load(open('sorgular.json', encoding='utf-8'))
for path, query in queries.items():
terms = set(words(query))
if path not in pages or not terms:
continue
in_title = len(terms & set(words(pages[path]['title']))) / len(terms)
in_h1 = len(terms & set(words(pages[path]['h1']))) / len(terms)
print(f'title {in_title:4.0%} h1 {in_h1:4.0%} {path}')
parts = Counter(part for p in pages.values() for part in set(re.split(r'\s[|:-]\s', p['title'])))
print('en çok tekrar eden title parçaları:', parts.most_common(3))
Yüzde 0 sonuç, title ya da H1'in sorgunun hiçbir terimini taşımadığını gösterir. Son satırda görünen kısa site adı tekrarı normaldir. Google her title öğesinin başına ya da sonuna yalnız site adını bir ayırıcıyla eklemeyi önerir. Her sayfada tekrar eden uzun bir ifade ise şablon metindir.
Hedef sorguyu title'ın başına yakın yazın, ana terimini H1'de tekrarlayın, sayfaya giden iç linklerin bağlantı metninde aynı terimi kullanın.
Önemli bilginin ilk 100 kelimede olup olmadığı nasıl ölçülür?
Önemli bilginin ilk 100 kelimede olup olmadığı, hedef sorgunun her teriminin gövdenin ilk 100 kelimesinde geçip geçmediğine bakılarak ölçülür. DocProperties modülü numTokens alanını, belirteçlere ayrılmış içerikteki belirteç (token), etiket ile noktalama sayısı olarak tanımlar. Açıklamaya göre sayı kesin değildir, nedenlerinden biri Google'ın belgeleri bir üst sınırda kırpmasıdır. Sınırın değeri belgelerde yer almaz. Aynı modüldeki avgTermWeight alanı, belge gövdesindeki bir terimin ortalama ağırlıklı yazı boyutudur.
# ilk100.py: sayfa başına kelime sayısı, <main> öncesindeki kelimeler, kalın oranı,
# ilk 100 kelimede eksik kalan sorgu terimleri (örnek)
import json
import re
from ortak import clean, load_pages, words
pages = load_pages('site')
queries = json.load(open('sorgular.json', encoding='utf-8'))
for path, query in queries.items():
if path not in pages:
continue
p = pages[path]
body = words(p['text'])
missing = [t for t in words(query) if t not in body[:100]]
src = p['html'].lower()
start, end = src.find('<body'), src.find('<main')
head = re.sub(r'(?is)<(script|style)\b.*?</\1>', ' ', src[start:end]) if 0 <= start < end else ''
bold = sum(len(words(clean(m[1]))) for m in re.findall(r'(?is)<(strong|b)\b[^>]*>(.*?)</\1>', p['main']))
print(f'{len(body):5d} kelime {len(words(clean(head))):4d} main öncesi '
f'kalın {bold / max(1, len(body)):.1%} eksik: {" ".join(missing) or "-"} {path}')
<main> öğesinden önceki kelime sayısının yüksek olması, menülerin ya da bantların HTML'de içerikten önce geldiğini gösterir. Eksik terim çıkan sayfanın girişini, sorguyu ana terimle cevaplayacak biçimde yeniden yazın. İçerikten önceki şablon metni kısa tutun, kalın yazıyı ana terime ve kilit cümlelere ayırın.
Sayfalarınızda clutterScore nasıl yaklaşık ölçülür?
Sayfalarınızdaki clutterScore karşılığı, her sayfanın yüklediği üçüncü taraf betikler ile iframe öğeleri sayılarak yaklaşık olarak ölçülür. QualityNsrNsrData modülündeki clutterScore, çok sayıda dikkat dağıtan ya da rahatsız eden kaynak yükleyen siteleri cezalandıran, Q* içindeki site düzeyinde bir fark (delta) sinyalidir. Açıklama bu kaynakları tanımlamaz. Sayfalarınızı sabit bir sayıyla değil, birbiriyle karşılaştırın.
# daginiklik.py: sayfa başına üçüncü taraf betik ile iframe sayısı (örnek)
import re
from ortak import load_pages
HOST = 'example.com'
for path, p in load_pages('site').items():
hosts = re.findall(r'''(?i)<script[^>]+src=["']?(?:https?:)?//([^/"'\s>]+)''', p['html'])
third = [h for h in hosts if not h.endswith(HOST)]
iframes = len(re.findall(r'(?i)<iframe\b', p['html']))
print(f'{len(third):3d} üçüncü taraf betik {len(set(third)):2d} alan adı {iframes:2d} iframe {path}')
Artık kullanmadığınız betik ile eklentileri kaldırın, kalanları yalnız gereken sayfalarda yükleyin. Her değişiklikten sonra betiği yeniden çalıştırın.
Sızıntı denetiminin sonuçları nasıl yorumlanır, ne yapılmaz?
Sızıntı denetiminin sonuçları Google'ın puanları gibi değil, incelenecek sayfaların listesi olarak yorumlanır. Her vekil ölçü bir alanın fikrini taşır, formülünü taşımaz. Şu altı hatadan kaçının.
- Alan listesini sıralama faktörü listesi sanmak. Bir alan Google'ın bir değeri sakladığını gösterir, nasıl kullandığını göstermez.
- Kendi sayılarınızı Google'ın değerleriyle kıyaslamak. 0,6 çıkan yarıçap vekili sitenizin siteRadius değeri hakkında bir şey söylemez.
- Sahte tıklama üretmek. DOJ'un delil olarak yayımladığı, Google mühendisi Pandu Nayak ile Ocak 2025'te yapılan görüşmenin notu NavBoost'un son 13 ayın tıklama verisini kullandığını yazar. Tıklama botları Google'a otomatik sorgu gönderir, Google'ın spam politikaları bunu makine tarafından oluşturulan trafik sayar.
- Sayfayı belli bir kelime sayısına şişirmek. Faydalı içerik rehberine göre Google'ın tercih ettiği bir kelime sayısı yoktur.
- Anlamlı değişiklik olmadan tarih ilerletmek.
- Arama trafiğine bakmadan aykırı sayfaları silmek.
Bulguyu yalnız değişiklik okura yarıyorsa düzeltin. Google'ın yayımladığı ilkeleri SEO kılavuzumda özetledim.
Google sızıntısı denetiminin kontrol listesi neleri içerir?
Google sızıntısı denetiminin kontrol listesi her vekil ölçü için bir kontrolü, düzeltmelerden sonraki ikinci çalıştırmayı içerir. Aşağıdaki dokuz madde yazının sırasını izler.
- Klasörde dizine eklenebilir her sayfa, sitemap.xml ile sorgular.json bulunur.
- Her aykırı sayfanın kararı bellidir: bağlamak, güçlendirmek, birleştirmek ya da yönlendirmek.
- Dizine eklenebilir hiçbir sayfa cümlelerinin yarısından fazlasını başka sayfalarla paylaşmaz.
- En düşük yüzde 10'luk grubun iyileştirme planı vardır.
- Görünür tarih, dateModified ile lastmod her sayfada aynıdır.
- Her title ile H1 hedef sorgunun ana terimini taşır.
- Hedef sorgunun her terimi ilk 100 kelimede geçer.
- Kalın yazı yalnız ana terimi ve kilit cümleleri işaretler.
- Her üçüncü taraf betiğin yüklenmek için bir gerekçesi vardır.
Her değişiklik turundan sonra betikleri yeniden çalıştırıp iki çıktıyı karşılaştırın. Googlebot'un değişen sayfaları alıp almadığını erişim kayıtlarından okumayı log analizi yazımda anlattım.
Taha Yelkenci
2010'dan beri SEO. rankZup kurucusu. Sorunuz mu var? Bana yazın →
Yorumlar
İlk yorumu siz yazın
← Önceki yazı
Bunlar da ilginizi çekebilir
7 Kasım 2024 · 9 dk
10 Ağustos 2020 · 3 dk
24 Ocak 2020 · 3 dk