Quantcast Choice와 함께 IAB TCF v2.0에 대한 동의를 기반으로 개인화 된 Adsense 광고를 표시하거나 차단하는 방법은 무엇입니까?
제 웹 사이트의 동의 관리 플랫폼으로 Quantcast Choice를 선택했습니다. 그러나 기본 솔루션으로 Google Adsense 광고는 관련 공급 업체 (Google)에 동의하기 전에 방문자에게 계속 제공됩니다. 2 일 이후 애드 센스에이 문제를 확인하는 알림이 있으며 90 일의 유예 기간이 지나면 더 이상 광고가 게재되지 않습니다. 오류 메시지 : " 2.1a : CMP 상태가 스텁,로드 또는 오류이기 때문에 태그 또는 SDK가 TC 문자열을 수신하지 않습니다. "
나는 스크립트에 전혀 익숙하지 않지만 Quantcast Choice가 실제로 작동하도록하려면 스크립트를 사용해야하는 것 같습니다. 기본적으로 다음 방법을 알아야합니다.
- 방문자가 Google에 동의하기 전에는 Google 광고를 게재하지 않습니다.
- 동의 후 개인 맞춤 광고 게재
- 동의없이 개인 맞춤이 아닌 광고 게재
지금까지 배운 내용 :
방문자의 동의가 있기 전에 Google Adsense 코드에이 스크립트를 추가하여 광고를 표시하지 않을 수 있습니다.
<script>(adsbygoogle=window.adsbygoogle||[]).pauseAdRequests=1;</script>
지금까지 문제 없습니다. 그러나 방문자가 공급 업체 Google에 동의했는지 알 수 있어야합니다. TCF v2.0에서 Google의 공급 업체 ID는 755입니다. Quantcast 페이지 중 하나에서 다음과 같은 코드와 텍스트가 혼합 된 것을 발견했지만 어떻게 사용하는지 모르겠습니다. Quantcast Choice 스크립트 내 웹 페이지에 이것을 넣어야합니까, 아니면 ...? (아래 링크 된 출처)
{{QC - __cmpConsents.iabVendorConsentIds}} matches the regular expression (^|,)755(,|$).
따라서 ID 755가 발견되면 다음으로 전화해야합니다.
(adsbygoogle=window.adsbygoogle||[]).pauseAdRequests=0
ID 755를 찾을 수없는 경우 다음으로 전화해야합니다.
(adsbygoogle=window.adsbygoogle||[]).requestNonPersonalizedAds=1
(adsbygoogle=window.adsbygoogle||[]).pauseAdRequests=0
그러나 이러한 "통화"를 어떻게 수행합니까?
따라서 따라야 할 단계를 이해하고 있다고 생각합니다.이 단계를 구현하고 점을 연결하는 방법을 모르는 것뿐입니다. 어떤 도움이라도 대단히 감사하겠습니다!
내가 사용한 출처 :
- https://support.google.com/adsense/answer/9042142
- https://help.quantcast.com/hc/en-us/articles/360051794434
내가 달성하고 싶은 일을하는 것처럼 보이는 웹 사이트의 예 : carscoops.com
답변
훨씬 간단한 해결책을 권합니다. TCF 2.0을 사용하면 주어진 동의에 따라 애드 센스 매개 변수 (개인 맞춤 광고 등)를 수동으로 구성 할 필요가 없습니다. 동의가 성공적으로로드 된 후 광고로드를 시작하기 만하면됩니다. Adsense 라이브러리는 동의 문자열을 자동으로 읽고 주어진 동의에 따라 광고를 표시합니다.
애드 센스와 Quantcast Choices 통합을위한 예제 코드 :
<!-- Quantcast Choice. Consent Manager Tag v2.0 (for TCF 2.0) -->
...
<!-- End Quantcast Choice. Consent Manager Tag v2.0 (for TCF 2.0) -->
<script>
__tcfapi('addEventListener', 2, function(tcData, success) {
if (success) {
if (tcData.eventStatus == 'useractioncomplete' || tcData.eventStatus == 'tcloaded') {
var hasStoreOnDeviceConsent = tcData.purpose.consents[1] || false;
if (hasStoreOnDeviceConsent) {
var adsbygoogle_script = document.createElement('script');
adsbygoogle_script.src = 'https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js';
document.head.appendChild(adsbygoogle_script);
}
}
}
});
</script>
모두가 이해할 수 있도록 2.1a Google IAB TCF v2 오류 는 사용자 동의가 설정 / 설정되기 전에 웹 사이트에 추가되는 Google 광고 제품 태그로 인해 발생할 수 있습니다. 사용자가 동의 할 때까지 광고가로드되지 않는 예상 동작을 보여주는 짧은 동영상 입니다. 사용자가 동의를 선택하기 전에 백그라운드에서 광고가로드되는 경우 동의를 기다리지 않고 Google 태그를 추가하기 때문에 2.1a 오류가 발생하는 것입니다.
이에 대한 해결책은 Google 광고 제품 태그를 사이트에 추가하는 방법에 따라 다르지만 아래 정보와 애드 센스 예제 도움말이 도움이되기를 바랍니다.
Google 태그 관리자
Google 태그 관리자를 사용하여 사이트에 Choice 및 Google 태그를 추가하는 경우 여기에서 가이드를 사용할 수 있습니다. https://help.quantcast.com/hc/en-us/articles/360051794434 과 https://help.quantcast.com/hc/en-us/articles/360051794434-TCF-v2-GTM-Implementation-Guide-IAB-Vendor-Tag-Blocking 참고로.
애드 센스 특정 예
예를 들어 https://support.google.com/adsense/answer/9042142 나는 이것이 Quantcast Choice TCF v2.0의 적절한 동의 신호를 기다리기 위해 예제를 재 작업해야하는 방법이라고 생각합니다.
나는 이것을 완전히 테스트 할 기회가 없었으므로 코드에 문제가 있으면 알려 주시면 예제를 업데이트하겠습니다.
업데이트 된 버전은이 코드 블록 아래를 참조하십시오.
<html>
<head>
<title>Your site title</title>
</head>
<body>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script>
// Initially pause adsbygoogle (wait for consent to unpause)
(adsbygoogle=window.adsbygoogle||[]).pauseAdRequests=1;
</script>
<script>
( function() {
// Run this in an interval (every 0.1s) just in case we are still waiting for consent
var cnt = 0;
var consentSetInterval = setInterval(function(){
cnt += 1;
// Bail if we have not gotten a consent response after 60 seconds.
if( cnt === 600 )
clearInterval(consentSetInterval);
if( typeof window.__tcfapi !== 'undefined' ) { // Check if window.__tcfapi has been set
clearInterval( consentSetInterval );
window.__tcfapi( 'addEventListener', 2, function( tcData,listenerSuccess ) {
if ( listenerSuccess ) {
if( tcData.eventStatus === 'tcloaded' || tcData.eventStatus === 'useractioncomplete' ) {
if ( ! tcData.gdprApplies ) {
// GDPR DOES NOT APPLY, UnpauseAdRequests
// Set request non-personalized ads to false as GDPR does not apply.
(adsbygoogle=window.adsbygoogle||[]).requestNonPersonalizedAds=0;
// Unpause ads, as GDPR does not apply.
(adsbygoogle = window.adsbygoogle || []).pauseAdRequests=0;
}
else {
// GDPR DOES APPLY
// Purpose 1 refers to the storage and/or access of information on a device.
var hasDeviceStorageAndAccessConsent = tcData.purpose.consents[1] || false;
// Google Requires Consent for Purpose 1
if (hasDeviceStorageAndAccessConsent) {
// GLOBAL VENDOR LIST - https://iabeurope.eu/vendor-list-tcf-v2-0/
// CHECK FOR GOOGLE ADVERTISING PRODUCTS CONSENT. (IAB Vendor ID 755)
var hasGoogleAdvertisingProductsConsent = tcData.vendor.consents[755] || false;
// Check if the user gave Google Advertising Products consent (iab vendor 755)
if(hasGoogleAdvertisingProductsConsent) {
var hasPersonalizedProfileConsent = tcData.purpose.consents[3] || false;
var hasPersonalizedAdsConsent = tcData.purpose.consents[4] || false;
// Check if have add personalization consent Purpose 3 and 4
if( hasPersonalizedAdsConsent && hasPersonalizedProfileConsent ) {
// Set request non-personalized ads to false.
(adsbygoogle=window.adsbygoogle||[]).requestNonPersonalizedAds=0;
}
else {
// Set request non-personalized ads to true.
(adsbygoogle=window.adsbygoogle||[]).requestNonPersonalizedAds=1;
}
// Unpause ads , the user has granted consent for purpose 1 and given google consent.
(adsbygoogle = window.adsbygoogle || []).pauseAdRequests=0;
}
}
}
}
}
} );
}
cnt++;
}, 100);
})();
</script>
<!-- One test unit for GDPR -->
<ins class="adsbygoogle"
style="display:inline-block;width:970px;height:250px"
data-ad-client="ca-pubxxx"
data-ad-slot="slot_id">
</ins>
<!-- Another test unit for GDPR -->
<ins class="adsbygoogle"
style="display:inline-block;width:250px;height:250px"
data-ad-client="ca-pubxxx"
data-ad-slot="slot_id">
</ins>
<script>
// This will trigger the ad request if ads were unpaused in the CMP consent check above.
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</body>
</html>
편집 : 새로운 업데이트 버전 추가 (8 월 18 일)
이것은 위보다 더 나은 버전 일 수 있습니다. 이것은 다시 테스트되지 않았으므로 문제가 있으면 테스트하고 피드백을 제공하십시오. 이 업데이트 된 버전의 주요 차이점은 다음과 같습니다.
우리는 더 이상 tcData.purpose.consents [3] 및 tcData.purpose.consents [4]를 확인하지 않고 대신 Google에 의존하여 개인 맞춤 광고 표시 여부를 결정합니다.
추가하지 않는다 https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js동의 할 때까지 페이지에 추가하여 동의 할 때까지 원치 않는 쿠키가 추가되지 않도록합니다. 이를 통해 (adsbygoogle = window.adsbygoogle || []). pauseAdRequests = 1; 항목도
<html>
<head>
<title>Your site title</title>
</head>
<body>
<script>
( function() {
var insertAdsByGoogleJs = function() {
var element = document.createElement('script');
var firstScript = document.getElementsByTagName('script')[0];
var url = "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js";
element.async = true;
element.type = 'text/javascript';
element.src = url;
firstScript.parentNode.insertBefore(element, firstScript);
};
// Run this in an interval (every 0.1s) just in case we are still waiting for consent
var cnt = 0;
var consentSetInterval = setInterval(function(){
cnt += 1;
// Bail if we have not gotten a consent response after 60 seconds.
if( cnt === 600 )
clearInterval(consentSetInterval);
if( typeof window.__tcfapi !== 'undefined' ) { // Check if window.__tcfapi has been set
clearInterval( consentSetInterval );
window.__tcfapi( 'addEventListener', 2, function( tcData,listenerSuccess ) {
if ( listenerSuccess ) {
if( tcData.eventStatus === 'tcloaded' || tcData.eventStatus === 'useractioncomplete' ) {
if ( ! tcData.gdprApplies ) {
// GDPR DOES NOT APPLY
// Insert adsbygoogle.js onto the page.
insertAdsByGoogleJs();
}
else {
// GDPR DOES APPLY
// Purpose 1 refers to the storage and/or access of information on a device.
var hasDeviceStorageAndAccessConsent = tcData.purpose.consents[1] || false;
// Google Requires Consent for Purpose 1
if (hasDeviceStorageAndAccessConsent) {
// GLOBAL VENDOR LIST - https://iabeurope.eu/vendor-list-tcf-v2-0/
// CHECK FOR GOOGLE ADVERTISING PRODUCTS CONSENT. (IAB Vendor ID 755)
var hasGoogleAdvertisingProductsConsent = tcData.vendor.consents[755] || false;
// Check if the user gave Google Advertising Products consent (iab vendor 755)
if(hasGoogleAdvertisingProductsConsent) {
// Insert adsbygoogle.js onto the page.
insertAdsByGoogleJs();
}
}
}
}
}
} );
}
cnt++;
}, 100);
})();
</script>
<!-- One test unit for GDPR -->
<ins class="adsbygoogle"
style="display:inline-block;width:970px;height:250px"
data-ad-client="ca-pubxxx"
data-ad-slot="slot_id">
</ins>
<!-- Another test unit for GDPR -->
<ins class="adsbygoogle"
style="display:inline-block;width:250px;height:250px"
data-ad-client="ca-pubxxx"
data-ad-slot="slot_id">
</ins>
<script>
// This will trigger the ad request if ads were unpaused in the CMP consent check above.
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</body>
</html>