Tránh các lỗi triển khai phổ biến
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Các trường hợp sau thể hiện một số lỗi phổ biến nhất được ghi nhận khi
triển khai GPT. Mặc dù những cách triển khai như vậy có vẻ hoạt động tốt với
của GPT, chúng tôi không đảm bảo rằng họ sẽ tiếp tục làm như vậy trong tương lai. Trong trường hợp cực đoan nhất, những cách triển khai này có thể khiến hoạt động phân phát quảng cáo bị gián đoạn theo cách không thể dự đoán.
Đây được coi là những cách triển khai không được hỗ trợ.
Mỗi tình huống bao gồm một phương pháp đề xuất để khắc phục vấn đề được nêu.
Xin lưu ý rằng danh sách này không phải là danh sách đầy đủ về các vấn đề tiềm ẩn,
nhưng dự kiến sẽ đóng vai trò là một hướng dẫn hữu ích
để xác định các loại vấn đề có thể cần
cần xử lý.
Hơn nữa, tuỳ thuộc vào cách triển khai, bạn có thể cần tìm tất cả những nơi cần thực hiện những thay đổi như vậy trong trang web của mình.
Lỗi thường gặp
Trường hợp 1: Sử dụng bản sao không chính thức của thư viện JavaScript GPT
Nội dung mô tả trường hợp sử dụng cấp cao |
Lưu trữ gpt.js, pubads_impl.js hoặc bất kỳ thư viện nào chúng tải từ máy chủ của bạn, hoặc
tải các tệp này từ một nguồn không chính thức.
|
Ví dụ về đoạn mã có lỗi |
// Incorrect: Accessing these files from an unofficial source
<script async src="https://www.example.com/tag/js/gpt.js"></script>
|
Các cách đề xuất để khắc phục lỗi |
// 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>
|
Trường hợp 2: Dựa vào trình nghe thẻ tập lệnh gpt.js
Nội dung mô tả trường hợp sử dụng cấp cao |
Giả sử rằng API GPT đã sẵn sàng để được gọi khi tệp JavaScript gpt.js được tải là không chính xác, vì một số phần của API do tệp pubads_impl.js cung cấp. Sử dụng API theo bất kỳ cách nào (bao gồm cả khung)
từ bên trong trình nghe sự kiện được đính kèm vào thẻ tập lệnh không chính xác.
|
Ví dụ về đoạn mã có lỗ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);
|
Cách khắc phục lỗi được đề xuất |
// 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);
|
Giải thích / mô tả bản sửa lỗi |
googletag.cmd duy trì một danh sách các lệnh sẽ chạy ngay khi GPT
đã sẵn sàng. Đây là cách đúng để đảm bảo lệnh gọi lại của bạn sẽ chạy khi GPT đã tải.
|
Tình huống 3: Kiểm tra đối tượng googletag để biết liệu GPT đã sẵn sàng hay chưa
Nội dung mô tả trường hợp sử dụng cấp cao |
Vì API GPT có thể chưa sẵn sàng khi tệp JavaScript gpt.js được tải
hoặc khi đối tượng googletag được xác định, sẽ kiểm tra đối tượng đó để xem liệu
API GPT có sẵn không đáng tin cậy.
|
Ví dụ về đoạn mã có lỗi |
// Incorrect: Relying on the presence of the googletag object
// as a check for the GPT API.
if (typeof googletag != 'undefined') {
functionProcessingGPT();
}
|
Cách khắc phục lỗi được đề xuất |
// Correct: Relying on googletag.apiReady as a check for the GPT API.
if (window.googletag && googletag.apiReady) {
functionProcessingGPT();
}
|
Giải thích/nội dung mô tả về bản sửa lỗi |
GPT sẽ điền cờ boolean googletag.apiReady ngay khi API sẵn sàng được gọi để bạn có thể đưa ra các câu nhận định đáng tin cậy.
|
Tình huống 4: Dựa vào cú pháp mã bị làm rối
Nội dung mô tả trường hợp sử dụng cấp cao |
Nếu đang dựa vào cú pháp chính xác của mã thư viện GPT rút gọn, bạn gần như chắc chắn sẽ gặp phải sự cố. Vui lòng giới hạn việc sử dụng API được ghi lại trong Hướng dẫn tham khảo API, vì chúng tôi liên tục thay đổi cách hoạt động bên trong của GPT để cải thiện liên tục.
Ví dụ: một yêu cầu phổ biến là phát hiện thời điểm PubAdsService được tải đầy đủ trong
để gọi refresh() .
|
Ví dụ về đoạn mã có lỗi |
// Incorrect: Relying on an obfuscated property.
if (googletag.pubads().a != null) {
functionProcessingGPT();
}
|
Cách khắc phục lỗi được đề xuất |
// Correct: Relying on public GPT API methods
// (i.e. googletag.pubadsReady in this case).
if(window.googletag && googletag.pubadsReady) {
functionProcessingGPT();
}
|
Giải thích/nội dung mô tả về bản sửa lỗi |
Hệ thống chỉ có thể sử dụng API công khai. Trong trường hợp phát hiện xem PubAdsService có
nên chúng ta có một giá trị boolean
googletag.pubadsReady.
|
Trường hợp 5: Ghi đè hàm hoặc biến bất kỳ của GPT
Nội dung mô tả trường hợp sử dụng cấp cao |
Các trường hợp sử dụng dựa trên việc ghi đè bất kỳ hàm hoặc biến nào mà GPT sử dụng có thể bị hỏng bất cứ lúc nào
vì đây không phải là trường hợp sử dụng được hỗ trợ. Việc thay đổi thời gian trong nội bộ GPT có thể hiển thị thông tin này
loại hành vi không chính xác
do bị hỏng.
|
Ví dụ về đoạn mã có lỗi |
// Incorrect: Haphazardly overwriting a googletag.* property.
googletag.cmd = [];
|
Cách khắc phục lỗi được đề xuất |
// Correct: Never overwrite googletag.* properties if they already exist.
// Always check before assigning to them.
googletag.cmd = googletag.cmd || [];
|
Tình huống 6: Đặt sai thứ tự lệnh gọi đến GPT
Mô tả trường hợp sử dụng cấp cao |
Tình trạng tương tranh có thể gây ra sự cố khi nội bộ của GPT phát triển. Một tập hợp câu lệnh được sắp xếp không chính xác nhưng vẫn hoạt động do các thời điểm cụ thể trong quá trình thực thi có thể không hoạt động trong tương lai.
|
Ví dụ về đoạn mã có lỗi |
// Incorrect: Setting page-level key-value targeting after calling
// googletag.enableServices().
googletag.enableServices();
googletag.defineSlot(...);
googletag.pubads().setTargeting(e, a);
|
Cách khắc phục lỗi được đề xuất |
// Correct: Setting page-level key-value targeting before calling
// googletag.enableServices().
googletag.pubads().setTargeting(e, a);
googletag.defineSlot(...);
googletag.enableServices();
|
Giải thích / mô tả bản sửa lỗi |
Tránh tình trạng tương tranh bằng cách đảm bảo tôn trọng thời gian thông thường của GPT. Sau đây là ví dụ về các thứ tự một phần hợp lệ:
-
Define-Enable-Display
- Xác định chế độ cài đặt cấp trang
- Xác định khung giờ
- enableServices()
- Vùng hiển thị
-
Bật tuỳ chọn Hiển thị Xác định
- Xác định chế độ cài đặt ở cấp trang
- enableServices()
- Xác định ô
- Khe hiển thị
|
Tình huống 7: Sử dụng sai mục đích hàm đóng và phạm vi biến JavaScript
Mô tả trường hợp sử dụng cấp cao |
Giả định không chính xác về phạm vi biến JavaScript và giá trị của các biến được ghi lại trong hàm được truyền đến googletag.cmd.push .
|
Ví dụ về đoạn mã có lỗ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]);
})
}
}
|
Cách khắc phục lỗi được đề xuất |
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]);
}
}
)
|
Giải thích / mô tả bản sửa lỗi |
Trong JavaScript, các hàm đóng thu thập biến theo tham chiếu thay vì theo giá trị. Điều này có nghĩa là nếu một biến được gán lại, thì giá trị mới của biến đó sẽ được sử dụng khi hàm đóng đã thu thập biến đó được thực thi sau này. Do đó, hành vi của mã trong trạng thái đóng
có thể thay đổi tuỳ thuộc vào việc lệnh gọi lại được thực thi ngay lập tức hay bị trì hoãn.
Trong trường hợp GPT được tải không đồng bộ, tuỳ thuộc vào tốc độ tải của GPT, các lệnh gọi lại trên hàng đợi lệnh có thể thực thi ngay lập tức hoặc không. Trong ví dụ trước, việc này sẽ thay đổi hành vi của các lệnh trong hàng đợi.
Để tránh mọi vấn đề, bạn không nên giả định rằng các hàm được đặt vào hàng đợi lệnh sẽ thực thi ngay lập tức và bạn cần phải cẩn thận với các quy tắc về phạm vi của JavaScript.
|
Tình huống 8: Di chuyển vùng chứa khe trong DOM sau khi gọi màn hình
Nội dung mô tả trường hợp sử dụng cấp cao |
Việc di chuyển hoặc chèn vùng chứa vị trí trong DOM sau khi gọi màn hình có thể dẫn đến
chỉnh lại luồng không mong muốn và hành vi khó đoán trong GPT.
|
Ví dụ về đoạn mã có lỗ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"));
|
Các cách đề xuất để khắc phục lỗi |
// 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");
|
Tình huống 9: Ghi đè API trình duyệt
Nội dung mô tả trường hợp sử dụng cấp cao |
GPT không hỗ trợ việc ghi đè (còn gọi là vá khỉ, polyfilling) các API trình duyệt.
Phương pháp này có thể làm hỏng các tập lệnh của bên thứ ba như GPT theo những cách không mong muốn.
|
Ví dụ về đoạn mã có lỗi |
// Incorrect: Overwriting window.fetch
const { fetch: originalFetch } = window;
window.fetch = (...args) => {
console.log('Fetching!');
return originalFetch(resource, config);
};
|
Cách khắc phục lỗi được đề xuất |
// 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);
}
|
Trừ phi có lưu ý khác, nội dung của trang này được cấp phép theo Giấy phép ghi nhận tác giả 4.0 của Creative Commons và các mẫu mã lập trình được cấp phép theo Giấy phép Apache 2.0. Để biết thông tin chi tiết, vui lòng tham khảo Chính sách trang web của Google Developers. Java là nhãn hiệu đã đăng ký của Oracle và/hoặc các đơn vị liên kết với Oracle.
Cập nhật lần gần đây nhất: 2025-07-25 UTC.
[null,null,["Cập nhật lần gần đây nhất: 2025-07-25 UTC."],[[["\u003cp\u003eAvoid unofficial copies of GPT JavaScript libraries, always access them from an official Google domain.\u003c/p\u003e\n"],["\u003cp\u003eUtilize \u003ccode\u003egoogletag.cmd.push\u003c/code\u003e to queue functions and ensure they execute when GPT is ready, rather than relying on script tag listeners or checking the \u003ccode\u003egoogletag\u003c/code\u003e object directly.\u003c/p\u003e\n"],["\u003cp\u003eStrictly adhere to the documented GPT API and refrain from relying on obfuscated code or overwriting any GPT functions or variables to prevent breakages.\u003c/p\u003e\n"],["\u003cp\u003eMaintain the correct order of GPT calls, like defining page-level settings and slots before enabling services and displaying ads, to avoid race conditions.\u003c/p\u003e\n"],["\u003cp\u003eBe mindful of JavaScript variable scoping and closures, especially when using \u003ccode\u003egoogletag.cmd.push\u003c/code\u003e, to prevent unexpected behavior due to delayed execution.\u003c/p\u003e\n"],["\u003cp\u003eEnsure slot containers are positioned correctly in the DOM before calling \u003ccode\u003edisplay\u003c/code\u003e to avoid reflows and unpredictable rendering.\u003c/p\u003e\n"],["\u003cp\u003eRefrain from overwriting browser APIs, as it can negatively impact the functionality of third-party scripts like GPT.\u003c/p\u003e\n"]]],["The content outlines unsupported methods of implementing GPT (Google Publisher Tag) that may cause unpredictable ad serving issues. Key actions to avoid include: using unofficial GPT JavaScript libraries, relying on script tag listeners or the `googletag` object to determine API readiness, using obfuscated code syntax, overwriting GPT functions/variables, mis-ordering GPT calls, and misusing JavaScript variable scoping. Correct implementations involve using Google-hosted libraries, leveraging `googletag.cmd.push`, respecting API timing, and modifying the DOM before calling display. Also, avoid overwriting browser APIs.\n"],null,[]]