यहां दी गई स्थितियों में, जीपीटी को लागू करते समय होने वाली कुछ आम गलतियां बताई गई हैं. हालांकि, इस तरह के कॉन्फ़िगरेशन मौजूदा रणनीतियों के साथ ठीक से काम करते हुए दिख सकते हैं
इस बात की कोई गारंटी नहीं है कि वे आने वाले समय में भी ऐसा करते रहेंगे. ज़्यादातर मामलों में, इन बदलावों की वजह से विज्ञापन दिखाने में रुकावट आ सकती है.
इन्हें लागू करने का तरीका काम नहीं करता.
हर स्थिति में, दिखाई गई समस्या को ठीक करने के लिए सुझाया गया तरीका शामिल होता है.
ध्यान दें कि इस सूची में संभावित समस्याओं की पूरी सूची नहीं है,
हालांकि, इसे उन समस्याओं की पहचान करने में मदद करने वाली गाइड के तौर पर काम करने की उम्मीद की जाती है जिनकी ज़रूरत पड़ सकती है
पता किया जा सके.
इसके अलावा, लागू करने के तरीके के आधार पर, आपको उन सभी जगहों को देखना होगा जहां
ऐसे बदलाव आपकी साइट में ज़रूरी हो सकते हैं.
आम गलतियां
पहली स्थिति: GPT JavaScript लाइब्रेरी की अनौपचारिक कॉपी का इस्तेमाल करना
इस्तेमाल के उदाहरण की ज़्यादा जानकारी |
gpt.js, pubads_impl.js या आपके सर्वर से लोड होने वाली किसी लाइब्रेरी को होस्ट करना या
किसी गैर-आधिकारिक सोर्स से इन फ़ाइलों को लोड कर रही हूँ.
|
गड़बड़ी वाले कोड स्निपेट का उदाहरण |
// Incorrect: Accessing these files from an unofficial source
<script async src="https://www.example.com/tag/js/gpt.js"></script>
|
गड़बड़ी को ठीक करने के सुझाए गए तरीके |
// Correct: Access these files from a Google domain
<script src="https://securepubads.g.doubleclick.net/tag/js/gpt.js" crossorigin="anonymous" async></script>
// Also correct, if using Limited Ads
<script src="https://pagead2.googlesyndication.com/tag/js/gpt.js" async></script>
|
दूसरा उदाहरण: gpt.js स्क्रिप्ट टैग के लिसनर पर भरोसा करना
इस्तेमाल के हाई लेवल के उदाहरण के बारे में जानकारी |
यह मानना गलत है कि JavaScript फ़ाइल gpt.js लोड होने पर, GPT API कॉल करने के लिए तैयार हो जाता है. ऐसा इसलिए, क्योंकि एपीआई के कुछ हिस्से pubads_impl.js फ़ाइल से मिलते हैं. इसलिए, स्क्रिप्ट टैग से जुड़े इवेंट लिसनर में, एपीआई पर किसी भी तरह (फ़्रेमवर्क के साथ) भरोसा करना गलत है.
|
गड़बड़ी वाले कोड स्निपेट का उदाहरण |
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);
|
गड़बड़ी को ठीक करने के सुझाए गए तरीके |
// 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);
|
समस्या हल करने की जानकारी / समस्या हल करने की जानकारी |
googletag.cmd उन निर्देशों की सूची बनाए रखता है जो GPT के बाद चलाए जाएंगे
तैयार है. यह पक्का करने का सही तरीका है कि GPT लोड होने पर आपका कॉलबैक चलता रहे.
|
स्थिति 3: Googletag ऑब्जेक्ट की जांच करके, यह पता लगाना कि GPT तैयार है या नहीं
इस्तेमाल के उदाहरण की ज़्यादा जानकारी |
ऐसा हो सकता है कि JavaScript फ़ाइल gpt.js लोड होने या googletag ऑब्जेक्ट तय होने पर, GPT API उपलब्ध न हो. इसलिए, उस ऑब्जेक्ट की जांच करके यह पता लगाना कि GPT API उपलब्ध है या नहीं, भरोसेमंद नहीं है.
|
गड़बड़ी वाले कोड स्निपेट का उदाहरण |
// Incorrect: Relying on the presence of the googletag object
// as a check for the GPT API.
if (typeof googletag != 'undefined') {
functionProcessingGPT();
}
|
गड़बड़ी को ठीक करने के सुझाए गए तरीके |
// Correct: Relying on googletag.apiReady as a check for the GPT API.
if (window.googletag && googletag.apiReady) {
functionProcessingGPT();
}
|
समस्या को ठीक करने के बारे में जानकारी |
एपीआई कॉल करने के लिए तैयार होते ही, GPT, बोलियन फ़्लैग
googletag.apiReady को पॉप्युलेट कर देगा, ताकि आप भरोसेमंद दावे कर सकें.
|
चौथी स्थिति: उलझाने वाले कोड सिंटैक्स पर भरोसा करना
इस्तेमाल के उदाहरण की खास जानकारी |
अगर आपने छोटा किया गया GPT लाइब्रेरी कोड के सटीक सिंटैक्स पर भरोसा किया है, तो आपको ज़रूर कुछ समस्याएं आ सकती हैं. कृपया अपने इस्तेमाल को एपीआई की रेफ़रंस गाइड में बताए गए एपीआई तक सीमित रखें, क्योंकि हम इसमें लगातार बदलाव कर रहे हैं
GPT के और उसके पीछे के कामों में इस्तेमाल किया है.
उदाहरण के लिए, refresh() को कॉल करने के लिए, यह पता लगाना एक सामान्य ज़रूरत है कि PubAdsService पूरी तरह से कब लोड हो गई है.
|
गड़बड़ी वाले कोड स्निपेट का उदाहरण |
// Incorrect: Relying on an obfuscated property.
if (googletag.pubads().a != null) {
functionProcessingGPT();
}
|
गड़बड़ी को ठीक करने के सुझाए गए तरीके |
// Correct: Relying on public GPT API methods
// (i.e. googletag.pubadsReady in this case).
if(window.googletag && googletag.pubadsReady) {
functionProcessingGPT();
}
|
समस्या को ठीक करने के बारे में जानकारी |
सिर्फ़ सार्वजनिक एपीआई पर भरोसा किया जा सकता है. PubAdsService पूरी तरह से लोड हो गई है या नहीं, यह पता लगाने के लिए हमारे पास एक बूलियन वैल्यू googletag.pubadsReady है.
|
पांचवीं स्थिति: GPT के किसी फ़ंक्शन या वैरिएबल को ओवरराइट करना
इस्तेमाल के उदाहरण की खास जानकारी |
GPT में इस्तेमाल किए जाने वाले किसी भी फ़ंक्शन या वैरिएबल को ओवरराइट करने के आधार पर, इस्तेमाल के उदाहरण काम करना बंद कर सकते हैं
क्योंकि यह तरीका काम नहीं करता. GPT इंंटरनल में समय में होने वाले बदलावों से, यह जानकारी दिख सकती है
ब्रेकेज के कारण गलत व्यवहार करते हैं.
|
गड़बड़ी वाले कोड स्निपेट का उदाहरण |
// Incorrect: Haphazardly overwriting a googletag.* property.
googletag.cmd = [];
|
गड़बड़ी को ठीक करने के सुझाए गए तरीके |
// Correct: Never overwrite googletag.* properties if they already exist.
// Always check before assigning to them.
googletag.cmd = googletag.cmd || [];
|
छठी स्थिति: जीपीटी को कॉल का गलत क्रम देना
इस्तेमाल के उदाहरण की खास जानकारी |
GPT के अंदरूनी हिस्सों में बदलाव होने पर, रेस की स्थितियों में गड़बड़ी आ सकती है. ऐसा हो सकता है कि गलत क्रम में लगाए गए स्टेटमेंट, आने वाले समय में काम न करें. ऐसा तब होता है, जब स्टेटमेंट को लागू करने के लिए तय की गई समयावधि की वजह से वे काम करते हैं.
|
गड़बड़ी वाले कोड स्निपेट का उदाहरण |
// Incorrect: Setting page-level key-value targeting after calling
// googletag.enableServices().
googletag.enableServices();
googletag.defineSlot(...);
googletag.pubads().setTargeting(e, a);
|
गड़बड़ी को ठीक करने के सुझाए गए तरीके |
// Correct: Setting page-level key-value targeting before calling
// googletag.enableServices().
googletag.pubads().setTargeting(e, a);
googletag.defineSlot(...);
googletag.enableServices();
|
समस्या को ठीक करने के बारे में जानकारी |
जीपीटी के सामान्य समय का ध्यान रखकर, रेस कंडीशन से बचें. कुछ मामलों में, ऑर्डर के लिए ये वैल्यू इस्तेमाल की जा सकती हैं:
-
Define-Enable-Display
- पेज-लेवल सेटिंग तय करना
- स्लॉट तय करना
- enableServices()
- डिसप्ले स्लॉट
-
Enable-Define-Display
- पेज-लेवल की सेटिंग तय करना
- enableServices()
- स्लॉट तय करें
- डिसप्ले स्लॉट
|
सातवीं स्थिति: क्लोज़र और JavaScript वैरिएबल स्कोपिंग का गलत इस्तेमाल करना
इस्तेमाल के उदाहरण की खास जानकारी |
JavaScript वैरिएबल की स्कोपिंग और वैरिएबल की वैल्यू का गलत अनुमान
googletag.cmd.push को पास किए गए फ़ंक्शन में कैप्चर किया गया.
|
गड़बड़ी वाले कोड स्निपेट का उदाहरण |
// 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]);
})
}
}
|
गड़बड़ी को ठीक करने के सुझाए गए तरीके |
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]);
}
}
)
|
समस्या हल करने की जानकारी / समस्या हल करने की जानकारी |
JavaScript में क्लोज़र, वैल्यू के बजाय रेफ़रंस के आधार पर वैरिएबल कैप्चर करते हैं. इसका मतलब है कि अगर किसी वेरिएबल को फिर से असाइन किया जाता है, तो उसे कैप्चर करने वाले फ़ंक्शन क्लोज़र को बाद में लागू करने पर, उसकी नई वैल्यू का इस्तेमाल किया जाएगा. इसलिए, कॉलबैक को तुरंत या देर से लागू करने पर, क्लोज़र में कोड का व्यवहार बदल सकता है.
एसिंक्रोनस तरीके से लोड किए गए जीपीटी के मामले में, कमांड कतार पर जीपीटी के कॉलबैक तुरंत लागू हो सकते हैं या नहीं. यह इस बात पर निर्भर करता है कि जीपीटी कितनी तेज़ी से लोड होता है. पिछले इतने समय में
उदाहरण के लिए, इससे सूची में दिए गए निर्देशों का व्यवहार बदल जाता है.
किसी भी समस्या से बचने के लिए, कोड को इस धारणा के बिना लिखा जाना चाहिए कि कमांड कतार में डाले गए फ़ंक्शन तुरंत लागू हो जाएंगे. साथ ही, JavaScript के स्कोपिंग नियमों के बारे में ध्यान रखना चाहिए.
|
आठवीं स्थिति: डिसप्ले को कॉल करने के बाद, स्लॉट कंटेनर को DOM में ले जाना
इस्तेमाल के हाई लेवल के उदाहरण के बारे में जानकारी |
डिसप्ले को कॉल करने के बाद, डीओएम में स्लॉट कंटेनर को एक से दूसरी जगह ले जाने या डालने से, ये नतीजे हो सकते हैं
GPT में अनचाहा रीफ़्लो और अनचाहा व्यवहार.
|
गड़बड़ी वाले कोड स्निपेट का उदाहरण |
// 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"));
|
गड़बड़ी को ठीक करने के सुझाए गए तरीके |
// 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");
|
नौवीं स्थिति: ब्राउज़र एपीआई को ओवरराइट करना
इस्तेमाल के उदाहरण की ज़्यादा जानकारी |
GPT में, ब्राउज़र एपीआई को ओवरराइट (जिसे मंकी पैचिंग या पॉलीफ़िल करना भी कहा जाता है) नहीं किया जा सकता.
इस वजह से, GPT जैसी तीसरे पक्ष की स्क्रिप्ट में अचानक गड़बड़ियां हो सकती हैं.
|
गड़बड़ी वाले कोड स्निपेट का उदाहरण |
// Incorrect: Overwriting window.fetch
const { fetch: originalFetch } = window;
window.fetch = (...args) => {
console.log('Fetching!');
return originalFetch(resource, config);
};
|
गड़बड़ी को ठीक करने के सुझाए गए तरीके |
// Correct: Avoid making changes to browser APIs.
// If you need custom logic, consider leaving the browser API intact.
const myFetch = (...args) => {
console.log('Fetching!');
return window.fetch(...args);
}
|