Sık Yapılan Uygulama Hatalarından Kaçınma

Aşağıdaki senaryolarda, GPT uygulanırken gözlemlenen en yaygın hatalardan bazıları temsil edilmektedir. Bu tür uygulamalar GPT'nin mevcut sürümüyle iyi çalışıyor gibi görünse de gelecekte aynı şekilde çalışmaya devam edecekleri garanti edilmez. En ekstrem durumlarda bu uygulamalar, reklam sunumunun öngörülemeyecek şekillerde kesintiye uğramasına neden olabilir. Bunlar desteklenmeyen uygulamalar olarak kabul edilir.

Her senaryoda, gösterilen sorunun düzeltilmesi için önerilen bir yaklaşım bulunur.

Bu listenin olası sorunların tam kapsamlı bir listesini temsil etmediğini, ancak ele alınması gerekebilecek sorun türlerini belirlemede yararlı bir rehber olması beklendiğini unutmayın.

Ayrıca, uygulamanıza bağlı olarak, sitenizde bu tür değişikliklerin gerekli olabileceği tüm yerleri aramanız gerekebilir.

Sık Yapılan Yanlışlar

1. Senaryo: GPT JavaScript kitaplıklarının resmi olmayan kopyalarını kullanma

Üst düzey kullanım alanı açıklaması gpt.js, pubads_impl.js veya kendi sunucularınızdan yükledikleri kitaplıkları barındırma ya da bu dosyaları resmi olmayan bir kaynaktan yükleme.
Hatalı kod snippet'i örneği
// Incorrect: Accessing these files from an unofficial source
<script async src="https://www.example.com/tag/js/gpt.js"></script>
Hatayı düzeltmek için önerilen yöntemler
// Correct: Access these files from a Google domain
<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
// Also correct, if using Limited Ads
<script async src="https://pagead2.googlesyndication.com/tag/js/gpt.js"></script>

2. Senaryo: gpt.js komut dosyası etiket işleyicilerine güvenmek

Üst düzey kullanım alanı açıklaması API'nin bazı bölümleri pubads_impl.js dosyası tarafından sağlandığından, gpt.js JavaScript dosyası yanlış yüklendiğinde GPT API'nin çağrılmaya hazır olduğunu varsayar. Bu nedenle, komut dosyası etiketine ekli etkinlik işleyicilerin içinden API'ye herhangi bir şekilde (çerçeveler dahil) güvenmek yanlıştır.
Hatalı kod snippet'i örneği
var tag = document.createElement('script');
tag.type = 'text/javascript';
tag.src = (useSSL ? 'https:' : 'http:') +
        ‘//www.googletagservices.com/tag/js/gpt.js';
// Incorrect: Attaching a callback to the script’s onload event.
tag.onload = callback;
var node = document.getElementsByTagName('script')[0];
node.parentNode.insertBefore(tag, node);
Hatayı düzeltmek için önerilen yöntemler
// Make sure that googletag.cmd exists.
window.googletag = window.googletag || {};
googletag.cmd = googletag.cmd || [];
// Correct: Queueing the callback on the command queue.
googletag.cmd.push(callback);
Düzeltmenin açıklaması / açıklaması googletag.cmd, GPT hazır olur olmaz çalıştırılacak komutların listesini tutar. Bu, GPT yüklendiğinde geri çağırmanızın çalıştığından emin olmanın doğru yoludur.

3. Senaryo: GPT'nin hazır olup olmadığını öğrenmek için googletag nesnesini kontrol etme

Üst düzey kullanım alanı açıklaması gpt.js JavaScript dosyası yüklendiğinde veya googletag nesnesi tanımlandığında GPT API hazır olmayabilir. Bu nedenle, GPT API'nin kullanılabilir olup olmadığını görmek için bu nesnenin kontrol edilmesi güvenilir değildir.
Hatalı kod snippet'i örneği
// Incorrect: Relying on the presence of the googletag object
// as a check for the GPT API.
if (typeof googletag != 'undefined') {
 functionProcessingGPT();
}
Hatayı düzeltmek için önerilen yöntemler
// Correct: Relying on googletag.apiReady as a check for the GPT API.
if (window.googletag && googletag.apiReady) {
 functionProcessingGPT();
}
Düzeltmenin açıklaması / açıklaması GPT, güvenilir iddialarda bulunabilmeniz için API çağrılmaya hazır olur olmaz googletag.apiReady boole işaretini doldurur.

4. Senaryo: Karartılmış kod söz dizimini kullanma

Üst düzey kullanım alanı açıklaması Küçültülmüş GPT kitaplık kodunun hassas söz diziminden yararlanıyorsanız kesintilerle karşılaşma olasılığınız yüksektir. Sürekli geliştirmeler yapmak için GPT'nin iç işleyişini sürekli olarak değiştiriyoruz. Bu nedenle lütfen kullanımınızı API Referans Kılavuzu'nda belirtilen API ile sınırlandırın.
Örneğin, refresh() yöntemini çağırmak için PubAdsService tam yüklendiği zamanın algılanması yaygın bir şarttır.
Hatalı kod snippet'i örneği
// Incorrect: Relying on an obfuscated property.
if (googletag.pubads().a != null) {
 functionProcessingGPT();
}
Hatayı düzeltmek için önerilen yöntemler
// Correct: Relying on public GPT API methods
// (i.e. googletag.pubadsReady in this case).
if(window.googletag && googletag.pubadsReady) {
 functionProcessingGPT();
}
Düzeltmenin açıklaması / açıklaması Yalnızca genel API kullanılabilir. PubAdsService'in tam yüklü olup olmadığının tespit edilmesi durumunda googletag.pubadsReady boole değerini kullanırız.

5. Senaryo: GPT'nin herhangi bir işlevinin veya değişkeninin üzerine yazma

Üst düzey kullanım alanı açıklaması GPT tarafından kullanılan herhangi bir işlevin veya değişkenin üzerine yazmaya dayalı kullanım alanları, desteklenen bir kullanım alanı olmadığından her an bozulabilir. GPT dahili bileşenlerindeki zamanlama değişiklikleri, kesintiler nedeniyle bu tür yanlış davranışları ortaya çıkarabilir.
Hatalı kod snippet'i örneği
// Incorrect: Haphazardly overwriting a googletag.* property.
googletag.cmd = [];
Hatayı düzeltmek için önerilen yöntemler
// Correct: Never overwrite googletag.* properties if they already exist.
// Always check before assigning to them.
googletag.cmd = googletag.cmd || [];

6. Senaryo: GPT'ye yapılan çağrıları yanlış sıralama

Üst düzey kullanım alanı açıklaması GPT'nin dahili öğeleri geliştikçe yarış koşulları bozulmalara neden olabilir. Yürütme işlemindeki belirli zamanlamalar nedeniyle işlevsel olan, yanlış sıralanmış bir ifade grubu gelecekte çalışır durumda kalmayabilir.
Hatalı kod snippet'i örneği
// Incorrect: Setting page-level key-value targeting after calling
// googletag.enableServices().
googletag.enableServices();
googletag.defineSlot(...);
googletag.pubads().setTargeting(e, a);
Hatayı düzeltmek için önerilen yöntemler
// Correct: Setting page-level key-value targeting before calling
// googletag.enableServices().
googletag.pubads().setTargeting(e, a);
googletag.defineSlot(...);
googletag.enableServices();
Düzeltmenin açıklaması / açıklaması GPT'nin her zamanki zamanlamasına uyarak yarış koşullarından kaçının. Geçerli kısmi sıralamalara örnek olarak aşağıdakiler verilebilir:
  • Ekranı Tanımlama-Etkinleştirme
    1. Sayfa düzeyindeki ayarları tanımlama
    2. Yuvaları tanımlayın
    3. enableServices()
    4. Görüntüleme alanları
  • Görüntülemeyi-Tanımla
    1. Sayfa düzeyindeki ayarları tanımlama
    2. enableServices()
    3. Yuvaları tanımlayın
    4. Görüntüleme alanları

7. Senaryo: Kapanışları ve JavaScript değişkeni kapsamını hatalı kullanma

Üst düzey kullanım alanı açıklaması JavaScript değişken kapsamı ve googletag.cmd.push işlevine iletilen işlevde yakalanan değişkenlerin değeri hakkında yanlış varsayımlar.
Hatalı kod snippet'i örneği
// Incorrect: Variable x is declared outside the anonymous function
// but referenced within it.
for (var x = 0; x < slotCount; x++) {
 window.googletag.cmd.push(
  function(){
    // If GPT is not yet loaded, this code will be executed subsequently when
    // the command queue is processed. Every queued function will use the last value
    // assigned to x (most likely slotCount).
    // This is because the function closure captures the reference to x,
    // not the current value of x.
    window.googletag.display(slot[x]);
  })
 }
}
Hatayı düzeltmek için önerilen yöntemler
window.googletag.cmd.push(
 function(){
  // Correct: We both declare and reference x inside the context of the function.
  for (var x = 0; x < slotCount; x++){
   window.googletag.display(slot[x]);
  }
 }
)
Düzeltmenin açıklaması / açıklaması

JavaScript'te, kapatma işlemleri değişkenleri değer yerine referans olarak yakalar. Diğer bir deyişle, bir değişken yeniden atanırsa bunu yakalayan işlev kapatma daha sonra yürütüldüğünde değişkenin yeni değeri kullanılır. Bu nedenle, kapatma sırasında kodun davranışı, geri çağırmanın hemen mi yoksa gecikmeli mi yürütülmesine bağlı olarak değişebilir.

GPT'nin eşzamansız olarak yüklenmesi durumunda, GPT'nin komut sırasında geri çağırmaları ne kadar hızlı yüklediğine bağlı olarak hemen yürütülebilir veya gerçekleşmeyebilir. Yukarıdaki örnekte bu işlem, sıraya alınan komutların davranışını değiştirir.

Herhangi bir sorunu önlemek için kod, komut sırasına yerleştirilen işlevlerin hemen yürütüleceği varsayılmadan yazılmalıdır ve JavaScript'in kapsam belirleme kurallarına dikkat edilmelidir.

8. Senaryo: Display çağırdıktan sonra DOM içinde slot kapsayıcılarını taşıma

Üst düzey kullanım alanı açıklaması Ekran çağırdıktan sonra alan kapsayıcılarını DOM'ye taşımak veya eklemek, GPT'de istenmeyen yeniden düzenlemeye ve öngörülemeyen davranışlara yol açabilir.
Hatalı kod snippet'i örneği
// Incorrect: Moving slot containers after calling display
googletag.defineSlot("/1234/travel/asia", [728, 90], "div-gpt-ad-123456789-0");
googletag.enableServices();
googletag.display("div-gpt-ad-123456789-0");
...
// Inserting another element before the slot container, pushing the slot container down the page.
document.body.insertBefore(someOtherElement, document.getElementById("div-gpt-ad-123456789-0"));
Hatayı düzeltmek için önerilen yöntemler
// Correct: Make any DOM order changes before calling display

document.body.insertBefore(someOtherElement, document.getElementById("div-gpt-ad-123456789-0"));
...
googletag.defineSlot("/1234/travel/asia", [728, 90], "div-gpt-ad-123456789-0");
googletag.enableServices();
googletag.display("div-gpt-ad-123456789-0");