Mert Özen Her Satırda Daha İleri
SEO ve GEO Content SEO — #03

Search Intent: Sorgunun Arkasındaki Niyeti Okumak ve Doğru İçerik Formatını Seçmek

Mert Özen 14 Kas 2026 10 dk 2 görüntülenme
Search Intent: Sorgunun Arkasındaki Niyeti Okumak ve Doğru İçerik Formatını Seçmek

Search intent, sorgunun arkasındaki amaçtır ve doğru içerik formatını o belirler: tanım isteyen sorguya rehber, hata mesajına ilk ekranda çözüm, karşılaştırmaya tablo. Broder sınıflamasını, rater rehberindeki Know/Do/Website niyetlerini, geliştirici sorgularına özgü niyetleri, SERP okumayı, AI Overviews'un tıklamaya etkisini ve .NET 10 ile sorguları niyete göre sınıflandırmayı anlatıyoruz.

Sürüm notu: Bu yazıdaki kodlar .NET 10 ile derlenip denenmiştir; Google'ın Search Quality Rater Guidelines'ın 11 Eylül 2025 sürümünü ve Search Central dokümanlarının Kasım 2026 hâlini esas alır.

Önce Tahmin Et

Dört geliştirici aynı gün Google'a "ef core migration" yazıyor. Birincisi Entity Framework Core'u (EF Core) yeni öğreniyor ve migration'ın ne olduğunu merak ediyor. İkincisi modeline bir property ekledi ve komutu arıyor. Üçüncüsü yanlış bir migration'ı production'a göndermek üzere ve geri almanın yolunu arıyor. Dördüncüsü dotnet ef komutunun verdiği bir hatayla uğraşıyor. Sorgu aynı, ama dört farklı ihtiyaç var. Bookstore blog'unun bu sorgu için tek bir uzun rehberi var. Sence bu sayfa dördüne de cevap verebilir mi? Yoksa sorgunun asıl sahibi, dördünden biri mi?

Search Intent Nedir? Klasik Sınıflama

Search intent, bir sorgunun arkasındaki amaç: okur bu kelimeleri yazdığında ne yapmak, neyi öğrenmek ya da nereye ulaşmak istiyor? SEO (arama motorları için yapılan optimizasyon çalışması) literatüründe en çok anılan sınıflama, Andrei Broder'ın 2002'de yayımladığı "A Taxonomy of Web Search" makalesinden geliyor. Broder, web aramalarının yalnız bilgi aramak olmadığını, üç ana amaç taşıdığını öne sürdü: informational (bir konuda bilgi edinmek), navigational (belirli bir siteye ulaşmak) ve transactional (bir işlem yapmak: indirmek, satın almak gibi). SEO sektörü bunlara sık sık dördüncü bir tür ekliyor: commercial investigation, yani karar vermeden önce seçenekleri karşılaştırmak. Bu dördüncü tür Broder'ın makalesinde yok; sektörün pratik bir eklemesi.

Google'ın Search Quality Rater Guidelines'ı benzer bir çerçeve kullanıyor ama farklı adlarla. Rehbere göre bir sorgu Know (bir konuyu öğrenmek), Do (bir hedefi gerçekleştirmek veya bir işlem yapmak), Website (belirli bir siteye veya sayfaya ulaşmak) ya da Visit-in-person (fiziksel bir yere gitmek) niyeti taşıyabilir. Know'un özel bir alt türü olan Know Simple, bir iki cümleye veya kısa bir listeye sığan, çoğu kişinin üzerinde anlaşacağı kesin bir cevap isteyen sorgular. Rehber iki önemli not daha düşüyor: bir sorgunun aynı anda birden fazla niyeti olabilir ve bir sorgunun baskın yorumu zamanla değişebilir. Rater'ların puanları sıralamayı doğrudan değiştirmiyor, ama Google'ın "iyi sonuç" tanımını anlamanın en açık kaynağı.

Geliştirici Sorgularına Özgü Niyetler

Teknik blog'un sorguları bu genel sınıflara sığıyor, ama içerik formatına karar vermek için biraz daha ince bir ayrım işe yarıyor:

Sorgu kalıbıNiyetOkurun beklediği format
"X nedir", "what is X"Know: kavramı öğrenmekİlk paragrafta tanım, ardından kısa bir örnek ve neden önemli olduğu
"X nasıl yapılır", "how to X", komut adıDo: bir işi bitirmekAdım adım tutorial, kopyalanabilir komut ve kod
Hata kodu veya hata mesajıDo: bir sorunu çözmekHatanın nedeni ve çözüm, ilk ekranda
"X vs Y", "X mi Y mi"Commercial investigation: seçim yapmakKarşılaştırma tablosu, ölçüm, hangi durumda hangisi
Parametre, seçenek, sözdizimiKnow Simple: hızlı bakmakReferans veya cheat sheet, kısa ve taranabilir
"X 10 yenilikleri", "what's new in X"Know, taze bilgiSürüme göre liste, tarih ve kaynak
Site veya ürün adıWebsite: belirli bir yere gitmekDoğru sayfanın kendisi; içerik yazmak gerekmez

Burada en çok gözden kaçan satır hata mesajı. Okur bir sorunla geliyor ve sabrı yok; cevabı üçüncü bölümün ortasında bulacağı bir sayfadan çıkıp bir sonraki sonuca geçer. Aynı okur, "X nedir" sorgusunda konunun tamamını okumaya daha isteklidir.

SERP'i Okumak

Bir sorgunun niyetini tahmin etmenin en güvenilir yolu, Google'ın o sorgu için ne gösterdiğine bakmak. SERP (arama sonuç sayfası) Google'ın, kullanıcıların o sorguda neyi faydalı bulduğuna dair kendi yorumunu taşıyor. Bakılacak şeyler:

İlk sayfadaki formatlar. Sonuçların çoğu resmi doküman mı (Microsoft Learn), adım adım blog yazıları mı, Stack Overflow cevapları mı, video mu? "ef core migration geri alma" için forum cevapları ve kısa yazılar ağır basıyorsa, okur hızlı ve odaklı bir çözüm istiyor demektir. "ef core migration" için Microsoft Learn'deki genel bakış sayfası ilk sıradaysa, sorgunun baskın niyeti kavramı öğrenmek demektir.

Sonuç sayfasındaki özellikler. Video kutusu, "People also ask", AI Overview ya da öne çıkan bir snippet, Google'ın bu sorguda hangi cevap biçimini faydalı bulduğunu gösteriyor.

Tarihler. İlk sonuçlar son birkaç ayda yayımlanmış ya da güncellenmişse, sorgu taze bilgi istiyor olabilir.

Bunu elle, gizli pencerede ve hedef dilde yap. Sonuç sayfasını otomatik araçlarla toplu sorgulamak bir çözüm değil: Google'ın spam policy'leri arasındaki machine-generated traffic başlığı, Google Search'e izinsiz otomatik sorgu göndermeyi kapsıyor. Bir sorgu ailesi için en önemli beş-on sorguya elle bakmak çoğu zaman yeterli.

AI Overviews ve Tıklama

SERP okurken artık bir soruyu daha sormak gerekiyor: bu sorguda bir AI Overview çıkıyor mu? Google'ın "AI features and your website" sayfasına göre AI Overviews yalnız Google'ın sistemleri klasik sonuçların ötesinde fayda sağlayacağını düşündüğünde çıkıyor ve sitende bu özellikler için ek bir gereksinim yok. Aynı sayfa, AI Overview olan sonuç sayfalarından tıklayan kullanıcıların sitede daha uzun kaldığını söylüyor ve bu trafik Search Console'da "Web" arama tipinin içinde, ayrı bir satır olmadan sayılıyor.

Tıklama tarafında bağımsız bir veri de var. Pew Research Center'ın Temmuz 2025'te yayımladığı, ABD'deki 900 yetişkinin Mart 2025'teki tarama verisine dayanan analizine göre, AI özeti çıkan aramalarda kullanıcılar klasik bir sonuca ziyaretlerin %8'inde tıkladı; AI özeti çıkmayan aramalarda bu oran %15'ti. Google bu bulgunun yayıncılara sağlanan değerin tamamını yansıtmadığını söyleyerek itiraz etti. İçerik kararı için çıkarım şu: Know Simple niyetli, cevabı tek cümle olan sorgularda tıklama beklentisini düşük tut; bu sorgular yine de görünürlük için değerli olabilir. AI cevap motorlarının kaynakları nasıl seçip alıntıladığını GEO (AI cevap motorları için içerik optimizasyonu) serisinde ayrıntılı anlattık.

"Fresh" İsteyen Sorgular

Rater rehberinin ayrı bir bölümü tazelik isteyen sorgulara ayrılmış: son dakika haberleri, düzenli tekrar eden olaylar ve değeri güncel olmasına bağlı bilgiler. Teknik blog'da bu, sürüm sorguları demek. "ef core yenilikleri" yazan okur, büyük ihtimalle son sürümü soruyor; EF Core 8'in yeniliklerini anlatan, eskiden iyi sıralanan bir yazı bu sorguda artık okuru tatmin etmiyor.

Rehberdeki "sorgunun baskın yorumu zamanla değişir" notu da tam burada önem kazanıyor. "net lts" sorgusunun cevabı Kasım 2025'ten beri .NET 10; yeni bir LTS (uzun süreli destek) sürümü çıktığında cevap yine değişecek. Sürüm bağımlı bir sorguyu hedefleyen yazı, ya sürüm adını başlığında taşıyıp o sürümün sayfası olarak kalmalı ya da her sürümde güncellenmeli. Bu ayrımı serinin son yazısında içerik bakımı açısından ele alıyoruz.

Sorguları Niyete Göre Sınıflandırmak

Önceki yazıdaki örnek export'u bu kez niyete göre etiketleyelim. Kural tabanlı bir sınıflandırıcı mükemmel değil, ama yüzlerce sorguyu ilk geçişte gruplamak ve SERP'e elle bakacağın sorguları seçmek için yeterli.

using System.Text.RegularExpressions;

namespace Bookstore.ContentSeo;

public enum Intent { Navigational, Troubleshoot, Comparison, WhatsNew, HowTo, Definition, Broad }

public static class QueryIntent
{
    // Sıra önemli: ilk eşleşen kural kazanır
    private static readonly (Intent Intent, Regex Pattern)[] Rules =
    [
        (Intent.Navigational, Rx(@"\bbookstore\b")),
        (Intent.Troubleshoot, Rx(@"\bcs\d{4}\b|hatas[ıi]|uyar[ıi]s[ıi]|\berror\b|exception|must contain")),
        (Intent.Comparison, Rx(@"\bvs\b|\bm[ıiu]\b.*\bm[ıiu]\b|fark[ıi]")),
        (Intent.WhatsNew, Rx(@"yenilik|new features|what's new|\b\d+(\.\d+)? (release|sürümü)")),
        (Intent.HowTo, Rx(@"nas[ıi]l|\bhow to\b|geri alma|rollback|\badd\b|add-|bulk|toplu")),
        (Intent.Definition, Rx(@"nedir|\bwhat is\b")),
    ];

    public static Intent Classify(string query) =>
        Rules.FirstOrDefault(r => r.Pattern.IsMatch(query)) is { Pattern: not null } rule ? rule.Intent : Intent.Broad;

    private static Regex Rx(string pattern) =>
        new(pattern, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
}

Kuralların sırası bilinçli: "cs8618 uyarısı nasıl düzeltilir" hem bir hata kodu hem bir "nasıl" sorusu; okurun asıl durumu bir sorunla karşılaşmış olması, bu yüzden Troubleshoot önce geliyor. Program, migration sayfalarına gelen sorguları ve her sayfanın impression'larının niyetlere dağılımını yazdırıyor.

using System.Globalization;
using Bookstore.ContentSeo;

CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
string path = args.Length > 0 ? args[0] : "gsc-url-query.csv";
List<SearchRow> rows = [.. (await File.ReadAllLinesAsync(path)).Skip(1).Select(SearchRow.Parse)];

Console.WriteLine($"{"intent",-14}{"query",-40}{"impr",6}{"ctr",6}{"pos",6}");
foreach (SearchRow r in rows.Where(r => r.Url.Contains("migration")).OrderByDescending(r => r.Impressions))
{
    string query = r.Query.Length > 38 ? r.Query[..35] + "..." : r.Query;
    Console.WriteLine($"{QueryIntent.Classify(r.Query),-14}{query,-40}{r.Impressions,6}{r.Clicks * 100.0 / r.Impressions,5:F0}%{r.AvgPosition,6:F1}  {r.Url}");
}

// Her sayfanın impression'larının niyetlere dağılımı
Console.WriteLine();
foreach (IGrouping<string, SearchRow> page in rows.GroupBy(r => r.Url).OrderBy(g => g.Key))
{
    int total = page.Sum(r => r.Impressions);
    IEnumerable<string> mix = page
        .GroupBy(r => QueryIntent.Classify(r.Query))
        .OrderByDescending(g => g.Sum(r => r.Impressions))
        .Select(g => $"{g.Key} {g.Sum(r => r.Impressions) * 100 / total}%");
    Console.WriteLine($"{page.Key,-46}{string.Join(", ", mix)}");
}

dotnet run çıktısı (aynı örnek veri; yüzdeler aşağı yuvarlanmış):

intent        query                                     impr   ctr   pos
Broad         ef core migrations                         980    2%  11.3  /en/blog/ef-core-migrations-guide
Broad         ef core migration                          640    1%  14.6  /en/blog/ef-core-migrations-guide
Broad         ef core migration                          420    7%   6.2  /blog/ef-core-migration-rehberi
HowTo         ef core migration nasıl yapılır            310   12%   4.1  /blog/ef-core-migration-rehberi
HowTo         ef core migration geri alma                260    3%   9.8  /blog/ef-core-migration-rehberi
HowTo         ef core migration geri alma                240    5%   7.5  /blog/ef-core-migration-geri-alma
HowTo         dotnet ef migrations add                   210    3%   9.1  /en/blog/ef-core-migrations-guide
HowTo         ef core add-migration                      150    6%   8.4  /blog/ef-core-migration-rehberi
Definition    ef core migration nedir                    130   11%   5.0  /blog/ef-core-migration-rehberi
Troubleshoot  remove-migration hatası                     90   12%   3.2  /blog/ef-core-migration-geri-alma
HowTo         dotnet ef migrations add                    70    1%  18.2  /blog/ef-core-migration-rehberi
Navigational  bookstore blog ef core                      12   50%   1.0  /blog/ef-core-migration-rehberi

/blog/aspnet-core-di-lifetime                 Comparison 79%, Broad 20%
/blog/cs8618-nullable-uyarisi                 Troubleshoot 100%
/blog/dapper-ile-toplu-insert                 HowTo 100%
/blog/dependency-injection-nedir              Broad 66%, Definition 33%
/blog/ef-core-10-yenilikleri                  WhatsNew 100%
/blog/ef-core-migration-geri-alma             HowTo 72%, Troubleshoot 27%
/blog/ef-core-migration-rehberi               HowTo 58%, Broad 31%, Definition 9%, Navigational 0%
/blog/ef-core-vs-dapper                       Comparison 100%
/en/blog/cs8618-non-nullable-property-warning Troubleshoot 100%
/en/blog/ef-core-migrations-guide             Broad 88%, HowTo 11%
/en/blog/what-is-dependency-injection         Definition 60%, Broad 40%

Üç şey dikkat çekiyor. TR rehber sayfası (/blog/ef-core-migration-rehberi) beş farklı niyetten trafik alıyor; CTR'si (tıklama oranı) en yüksek sorguları "nasıl yapılır" ve "nedir", yani sayfanın gerçekten cevap verdiği sorgular. "ef core migration geri alma" sorgusunda ise rehber sayfa %3, ayrı geri alma sayfası %5 CTR ile kalıyor ve ikisi de 7–10 bandında. EN rehber sayfası impression'larının %88'ini dili ve niyeti belirsiz genel sorgulardan alıyor, ama CTR'si %1–2; bu sorgularda okurun ne istediğini anlamak için SERP'e bakmak gerekiyor.

Tek Sayfa mı, Ayrı Sayfalar mı?

Başlangıçtaki dört geliştiriciye dönelim. Karar için iki soru yeterli: niyetler aynı içeriği mi istiyor ve Google bu sorgular için aynı sonuçları mı gösteriyor? İki sorgunun ilk sayfasındaki sonuçlar büyük ölçüde örtüşüyorsa, Google'ın onları büyük ihtimalle aynı niyet olarak değerlendirdiğini düşünebilirsin; tek sayfa iki sorguya da cevap verebilir. Bu bir sektör pratiği, Google'ın dokümante ettiği bir kural değil. Sonuçlar farklıysa, ayrı sayfalar daha doğru.

Bookstore örneği için bu, şöyle bir karara çıkıyor: "nedir" ve "nasıl yapılır" aynı rehber sayfada kalır; okur kavramdan komuta doğal bir sırayla ilerliyor. Geri alma ayrı bir Do niyeti ve SERP'te forum cevapları ile kısa yazılar baskınsa, ayrı ve odaklı bir sayfa hak ediyor. Ama o zaman rehber sayfa geri alma sorgusunu hedeflememeli; rehberdeki geri alma bölümü konuyu birkaç cümleyle anlatıp ayrı sayfaya link vermeli. "remove-migration hatası" ise geri alma sayfasının bir bölümü olur, çünkü okur geri alma sırasında bu hatayla karşılaşıyor. İki sayfanın aynı sorguda yarışmasını önlemek, bir sonraki yazının konusu.

Üretimde Dikkat

Keyword map'e bir "niyet" ve bir "format" sütunu ekle. Yeni bir yazıya başlamadan önce, hedef sorgunun SERP'ine bakıp bu iki sütunu doldurmak, yanlış formatta yazılmış bir yazıyı baştan önler.

Sınıflandırıcıyı kaba bir filtre olarak kullan. Kurallar Türkçe ve İngilizce ifadeleri yakalamaya çalışıyor ama "dependency injection lifetime" gibi sorguları Broad'a düşürüyor. Kararı her zaman SERP'e bakarak ver.

Dil başına ayrı bak. Aynı sorgunun TR ve EN SERP'i farklı olabilir; Türkçe sonuçlarda forum ve video ağır basarken İngilizce sonuçlarda resmi doküman ilk sırada olabilir.

SERP'i tarihleyerek kaydet. Bir sorgunun ilk sayfasını ekran görüntüsüyle veya not olarak tarihli tutmak, niyetin ne zaman değiştiğini anlamanı sağlar.

Sık Düşülen Tuzaklar

Kendi istediğin formatı dayatmak. Sorgu iki satırlık bir cevap isterken 5.000 kelimelik bir rehber yazmak; ya da okur karşılaştırma tablosu beklerken bir hikâye anlatmak. Format, yazarın tercihine değil, okurun niyetine göre seçilir.

Niyet değiştiğinde içeriği güncellememek. Yeni bir sürüm çıktığında "ef core yenilikleri" sorgusunun cevabı değişir; eski sürümü anlatan sayfa, başlığı değişmese de artık yanlış niyete cevap veriyordur.

Tek bir sorguya bakıp aileyi unutmak. "ef core migration" sorgusunun belirsizliği, ailenin daha uzun ve daha net sorgularında çözülüyor; onları ayrı ayrı okumak gerekiyor.

Niyet sınıflarını içerik takvimi sanmak. Her niyet için bir yazı açmak gerekmiyor; aynı sayfanın doğal olarak cevap verdiği niyetler aynı sayfada kalmalı.

Küçük Bir Deneme

★☆☆ Kendi alanından bir sorgu seç ve gizli pencerede TR ve EN SERP'lerine bak. İlk beş sonucun formatlarını (doküman, blog, forum, video) not et; iki dil arasında fark var mı?

★★☆ QueryIntent'e bir "Reference" niyeti ekle: "cheat sheet", "parametreleri", "options", "syntax" gibi ifadeleri yakalasın. Kendi sorgu listende bu niyete düşen sorguların CTR'si diğerlerinden farklı mı?

★★★ Aynı sorgu ailesinden iki sorgu seç ve ilk on sonuçlarının URL listelerini elle kaydet. Ortak URL oranını hesaplayan küçük bir C# fonksiyonu yaz ve oran düşükse "ayrı sayfa" önerisi üretsin.

Bu yazıda tek tek sorguların niyetine baktık. Bir sonraki yazıda bir adım geri çekilip sitenin bütününe bakıyoruz: topic cluster, seri ve kategori yapısı ve aynı niyeti hedefleyen iki sayfanın birbirini zayıflattığı keyword cannibalization.