TEKNİK SEO

Node.js İle Google Indexing API Kullanımı ve Test Sonuçları

SAMET ÖZSÜLEYMAN

17 Mar, 2021

API’ler artık hayatımızın her alanında ve işlerimizde oldukça sık kullanıyoruz. Özellikle teknik SEO ile ilgilenenler için Google Indexing API konusunda hem bilgi vermek hem de görüşlerimi bu yazıda paylaşmak istedim. 

Google için özellikle iş ilanları ya da canlı yayınların site tarafından daha dizinine indexlettirmeden kapanması olumsuz bir durum oluşturuyordu. İş ilanı sayfası indexe açılıyor; ancak indexe dahil edilmesi çok uzun sürebiliyordu. Bu süreçte de başvurular çok yoğun olduğu için ziyaretçiler aradıklarını tam olarak bulamıyordu. Bundan dolayı Indexing API ilk olarak 26 Haziran 2018 tarihinde duyuruldu ve sadece Job Posting schema kullanan sayfalar için uygun olduğu açıklandı.

API bağlantısını Node.js kullanarak yaptım; lakin siz desteklenen diğer türler ile de bağlantı kurabilirsiniz. Verilere daha kolay ulaşabilmek için tüm işlemleri kişisel blogum üzerinden gerçekleştirdim.

Google Indexing API Nedir?

Google Indexing API (Dizine ekleme API’si), iş ilanları ya da canlı yayın videoları gibi kısa ömürlü içeriğe sahip sitelerin Google dizininde yer alması için geliştirilen ücretsiz API türüdür.

Google Indexing API, sayfalarınızın daha hızlı taranmasını sağlayan etkili yollarından birisidir. Sadece sahip olduğunuz Console mülkleri için bu işlemleri yapabilirsiniz. Ayrıca Bing’in de “URL and Content Submission API” özelliği bulunuyor. Üstelik sınırları Google’a göre daha fazla diyebilirim. Bing tarafıyla da ilgileniyorsanız mutlaka şuradan detayları incelemenizi önerebilirim.

Sitenizde belirli bir bölümde iş ilanı yayınlanıyorsa, sitenizin tamamı iş ilanı ise ve canlı yayınlar ile ilgili içerikler üretiyorsanız SEO planlarınıza Indexing API kullanımını dahil etmenizi öneririm. Elbette bu sayfalarınızı yapısal veriler ile de desteklemenizi öneririm.

Site haritalarına göre API ile gönderilen sayfalar aslında Google için daha faydalı olabilir. Google daha az kaynak tüketerek maksimum verimi elde etmeye çalışır:

Google Indexing API İle Neler Yapabilirsiniz?

Dizine Ekleme API'si ile aşağıda belirtilen işlemleri çok hızlı bir şekilde yapabilirsiniz:

  1. URL güncelleme: Güncellediğiniz bir içeriğin tekrar taranmasını istemek ya da yeni içeriğin dizine eklenmesi için talepte bulunmak.
  2. URL kaldırma: Sitenizde sildiğiniz sayfaları bu yöntem ile daha hızlı bir şekilde Google’a bildirebilirsiniz. Ardından da dizinden silinmiş URL’leriniz zamanla kaldırılabilir.
  3. Bir isteğin durumunu öğrenme: Google'ın belirli bir URL için her bildirim türünü en son ne zaman aldığını kontrol edebilirsiniz.
  4. Toplu dizine ekleme istekleri gönderme: En fazla 100 çağrıyı tek bir HTTP isteği bünyesinde birleştirerek, istemcinizin kurması gereken HTTP bağlantılarının sayısını azaltabilirsiniz.

URL_UPDATED hem de URL_DELETED gibi işlemler için kota limitleri bulunmaktadır:

Google Indexing API Nasıl Kurulur?

Kurulum işi biraz karışık gelebilir ve o yüzden adım adım anlatmaya çalışacağım. 

  1. Indexing API Projesi Oluşturma

İlk olarak Google Cloud üzerinden Indexing API için yeni bir proje oluşturun:

Aşağıdaki gibi bir ekranla karşılaşıyorsanız projeyi başarıyla oluşturdunuz:

Ardından şuradaki bağlantıya tıklayıp yeni bir service account oluşturmanız gerekiyor. En son oluşturduğunuz projeyi de seçmeyi unutmayın. Ben ismini “my project” olarak değiştirmeden bırakmışım:

“+create service account” butonuna tıkladıktan sonra karşımıza aşağıdaki gibi bir ekran çıkıyor. Account name ve diğer kısımları istediğiniz gibi yazabilirsiniz. Description kısmı zorunlu değil, dilerseniz o kısmı da doldurabilirsiniz. “Create” butonuyla devam edin:

Grant this service account access to project (optional)” kısmında “Role” kısmını Owner olarak işaretleyelim ve Done butonuyla bu adımı tamamlayalım:

Aşağıdaki sayfa otomatik olarak açılacaktır. Action kısmından “create key” butonuna tıklayalım:

JSON olarak dosyayı oluşturalım:

Dosya oluşacak ve bilgisayarınıza inecektir:

  1. Google Search Console & API Bağlantısı

Google Search Console hesabınız ile service account arasında bağlantı kurulması gerekiyor. Search Console’da yetki verilmiş bir hesapsanız ya da yetkileriniz kısıtlı ise bu adımı yaparken zorluk çekebilirsiniz. “Sahip” yetkisiyle mülkünüzde bu ayarı yapabilirsiniz. Bir SC mülkünde birden fazla sahip çeşitli doğrulama yöntemleri ile eklenebilir. Bundan dolayı eski kullanıcı kaydı silinme ve veriler gitmez hatırlatma yapmak istedim.

Search Console’da yetkilerinizi ayarladıktan sonra “Setting” kısmından “Users and permissions” kısmına tıklayın:

Sahiplik yetkisi olan hesaptaki 3 nokta işaretine tıklayarak “manage property owners” ile yeni sayfayı açın:

“Service accounts” kısmındayken oluşturulan E-mail adresini bu kısımdan ekleyip Continue butonuyla işlemi tamamlayın:

Aşağıdaki uyarıyı gördüğünüzde başarıyla adımları tamamladınız demektir:

Wordpress site sahipleri de Rank Math SEO eklentisini kullanmayı deneyebilirler.

Google Indexing API Kullanımı

API’yı kullanırken Node.js ile yapmak istedim. Google, aşağıdaki programlama dillerine özel de API’nin kullanımını destekliyor ve örneklerle açıklıyor:

Bilgisayarınıza Node.js kurulu değilse kurmanız gerekiyor. (Zorunda değilsiniz, ben makalede node.js üzerinden örnek verdiğim için belirtiyorum.)

İlk adımlarda oluşturup indirdiğiniz JSON dosyasını ve node.js dosyalarını masaüstünde bir klasörde bir araya getirin. Aşağıdaki kod ile de API’ye istek atmaya başlayabilirsiniz:

var request = require("request");
var { google } = require("googleapis");
var key = require("./service_account.json");

const jwtClient = new google.auth.JWT(
  key.client_email,
  null,
  key.private_key,
  ["https://www.googleapis.com/auth/indexing"],
  null
);

jwtClient.authorize(function(err, tokens) {
  if (err) {
    console.log(err);
    return;
  }
  let options = {
    url: "https://indexing.googleapis.com/v3/urlNotifications:publish",
    method: "POST",
    // Your options, which must include the Content-Type and auth headers
    headers: {
      "Content-Type": "application/json"
    },
    auth: { "bearer": tokens.access_token },
    // Define contents here. The structure of the content is described in the next step.
    json: {
      "url": "https://sametozsuleyman.com.tr/yapisal-veri-rehberi/",
      "type": "URL_UPDATED"
    }
  };
  request(options, function (error, response, body) {
    // Handle the response
    console.log(body);
  });
});

JSON içerisindeki URL kısmında kendi blogumdaki bir makaleye istek attığım örnek:

"URL_DELETED" konusunda da test yapmak gerekirse örnek “testt” isimli sayfa oluşturdum ve bunun silindiği ile ilgili bilgiyi iletiyorum. Bu kodu kullanmadan önce silinecek sayfanın 404 ya da 410 durum kodu döndürdüğünden ya da “noindex” eklendiğinden emin olmalısınız:

var request = require("request");
var { google } = require("googleapis");
var key = require("./service_account.json");

const jwtClient = new google.auth.JWT(
  key.client_email,
  null,
  key.private_key,
  ["https://www.googleapis.com/auth/indexing"],
  null
);

jwtClient.authorize(function(err, tokens) {
  if (err) {
    console.log(err);
    return;
  }
  let options = {
    url: "https://indexing.googleapis.com/v3/urlNotifications:publish",
    method: "POST",
    // Your options, which must include the Content-Type and auth headers
    headers: {
      "Content-Type": "application/json"
    },
    auth: { "bearer": tokens.access_token },
    // Define contents here. The structure of the content is described in the next step.
    json: {
      "url": "https://sametozsuleyman.com.tr/testt",
      "type": "URL_DELETED"
    }
  };
  request(options, function (error, response, body) {
    // Handle the response
    console.log(body);
  });
});

Kodu çalıştırdığımda başarılı sonucu görebiliyoruz:

Indexlenmesini istediğiniz URL’leri tek tek göndermek yerine bulk bir şekilde de gönderebilirsiniz. Günlük kota limitinin olduğunu da zaten giriş kısmında belirtmiştim.

API ile çalışırken gözden kaçırılan ufak detaylar yüzünden bazen aşağıdaki gibi hatalar alabilirsiniz. “Missing attribute. 'url' attribute is required.” hataları gibi:

API’den gelen tüm bu hata kodlarının ayrıntılı cevaplarını da doküman sayfasından ulaşabilirsiniz.

Test Sonuçları

API’den gelen istekleri loglara bakarak kontrol ettim. Discover ile ilgili içeriğime API ile UTC saat dilimine göre 19 Şubat 20:51’de istek attım:

Blog loglarım Türkiye’nin kullandığı saat dilimine göre tutuluyordu:

20:51’de atılan isteği TSİ 23:51 olarak düşünebilirsiniz. Logları incelediğimde 00:13 saatinde Googlebot’un geldiğini görebiliyorum:

Başka bir örnek daha gösterebilmek adına yeni bir URL’e istek atmıştım UTC 20:25 zaman diliminde: (TSİ 23:25)

Logları incelediğimde 00:01’de Googlebot’un sayfayı ziyaret ettiğini görüyorum:

Ortalama 30 dk. içerisinde Googlebot istediğim sayfaları ziyaret etti. Elbette bunun net bir zaman dilimi yok; ancak farklı 15-20 adet URL’de de bu işlemi yaptığımda benzer sonuca ulaştığımı söyleyebilirim.

Sitemde API ile istek attığım yeni bir URL’in indexlenip indexlenmediğini kontrol etmek için Türkiye Saati ile publish edilme tarihini de not düştüğüm yeni bir sayfa oluşturdum:

Oluşturduğum yeni test kategori sayfası API istek attım:

Ardından ilgili sayfa TSİ 17:14’te dizine eklendi. Bu işlem için Search Console’dan dizine eklenme talebinde bulunmadım, sadece API kullandım:

Test sayfasının SERP görünümü:

Yeni sayfamın dizine eklendiğini gördükten sonra panelden bu kategori sayfasını 404 statu kodu döndürecek şekilde sildim:

Test kategorisi 'URL_DELETED' komutuyla da API ile silinmesi için istek gönderdim:

Zaten yazımın üst kısımlarında da /testt sayfası için istek atmıştım. Yeni oluşturduğum kategori ve testt sayfasının Search Console tarama istatistikleri raporunda da 404 statu kodu verdiklerini net bir şekilde görebiliyorum:

Yazıyı sonlandırırken SEO’da bu konuyla ilgili önemli gördüğüm bazı hususları da sizlere aktarmak isterim. 

Farklı İçerik Türlerini API Destekler Mi?

Yaklaşık 2 yıl önce Garry Illyes, Reddit üzerinden diğer içerik türleriyle ilgili testler yaptıklarını açıklamıştı ve o tarihte itibaren bir gelişme henüz olmadı:

Google'dan John Mueller, Twitter'dan yaptığı açıklamada yine dökümanlarda da yer aldığı gibi tüm içerik türleri için API’nin uygun olmadığını net bir şekilde belirtti:

 

Mueller’e API’nin ilk çıktığı yıllarda benzer bir soru sorulduğunda ise “bilmiyorum” yanıtı vermişti:

İş İlanı ve Canlı Yayın Olmayan Siteler Kullanılabilir mi?

Yönergelerde belirtildiği üzere desteklenen sayfa türleri belli. Bunun haricindeki siteler kullansa bile Google bunu desteklemeyebilir.

API Kullandıktan Sonra Sayfam Indexlenmedi Neden?

API kullanılması içeriğin kesinlikle indexleneceği anlamına gelmiyor. Bu süreçte Google’ın arka planda sayfanızı dizine eklemek için kalite ve diğer birçok faktöre bağlı kaldığını unutmamalısınız.

Google Indexing API ile ilgili olabildiğince detay vermeye çalıştım umarım sizlere yardımcı olabilmişimdir :) 

Faydalı Bağlantılar:

https://github.com/swalker-888/google-indexing-api-bulk

https://developers.google.com/search/apis/indexing-api/v3/quickstart

https://willmanntobias.medium.com/google-indexing-api-tests-with-normal-urls-which-have-neither-job-posting-nor-livestream-4fa8af85c950