OneTrust
Connect Shoplift with OneTrust Cookie Consent to ensure A/B testing respects visitor privacy preferences managed through OneTrust.
Overview
OneTrust is a leading privacy management platform that helps businesses comply with GDPR, CCPA, and other privacy regulations. This guide shows how to integrate OneTrust's consent signals with Shoplift's analytics tracking.
Prerequisites
OneTrust Cookie Consent implemented on your Shopify store
OneTrust script loaded before Shoplift
Performance/Analytics cookies category configured in OneTrust
Implementation
Basic Integration
Add this code after your OneTrust script but before any analytics tracking:
// OneTrust + Shoplift Consent Integration
(function() {
// Function to sync OneTrust consent with Shoplift
function syncOneTrustWithShoplift() {
if (!window.OnetrustActiveGroups) {
// OneTrust not ready yet
setTimeout(syncOneTrustWithShoplift, 100);
return;
}
// Check if performance/analytics cookies are accepted
// C0002 is typically Performance Cookies - verify your OneTrust configuration
const hasAnalyticsConsent = window.OnetrustActiveGroups.includes('C0002');
// Update Shoplift consent
if (window.shoplift && window.shoplift.setAnalyticsConsent) {
window.shoplift.setAnalyticsConsent(hasAnalyticsConsent)
.then(() => {
console.log('Shoplift consent synchronized with OneTrust:', hasAnalyticsConsent);
})
.catch(error => {
console.error('Failed to update Shoplift consent:', error);
});
} else {
// Retry if Shoplift isn't ready
setTimeout(syncOneTrustWithShoplift, 100);
}
}
// Initial sync on page load
syncOneTrustWithShoplift();
// Listen for consent changes
window.OneTrust.OnConsentChanged(function() {
syncOneTrustWithShoplift();
});
})();
Advanced Integration with Cookie Categories
OneTrust uses specific category codes. Map these to Shoplift's consent:
// Advanced OneTrust + Shoplift Integration
const OneTrustShopliftBridge = {
// Map your OneTrust categories (check your OneTrust dashboard)
CATEGORY_MAPPING: {
'C0001': 'strictly_necessary', // Always active
'C0002': 'performance', // Analytics/Statistics
'C0003': 'functional', // Functionality
'C0004': 'targeting' // Marketing/Advertising
},
// Categories that enable Shoplift analytics
ANALYTICS_CATEGORIES: ['C0002'], // Performance/Analytics
initialize() {
// Wait for OneTrust to be ready
if (window.OneTrust && window.OneTrust.IsAlertBoxClosed()) {
this.syncConsent();
this.setupListeners();
} else {
setTimeout(() => this.initialize(), 100);
}
},
syncConsent() {
const hasConsent = this.checkAnalyticsConsent();
this.updateShopliftConsent(hasConsent);
},
checkAnalyticsConsent() {
if (!window.OnetrustActiveGroups) return false;
// Check if any analytics categories are active
return this.ANALYTICS_CATEGORIES.some(category =>
window.OnetrustActiveGroups.includes(category)
);
},
async updateShopliftConsent(consent) {
// Wait for Shoplift to be available
let attempts = 0;
while (!window.shoplift && attempts < 50) {
await new Promise(resolve => setTimeout(resolve, 100));
attempts++;
}
if (window.shoplift && window.shoplift.setAnalyticsConsent) {
try {
await window.shoplift.setAnalyticsConsent(consent);
console.log('✅ Shoplift consent updated via OneTrust:', consent);
// Track consent event for debugging
if (window.shoplift.getVisitorData) {
const visitorData = window.shoplift.getVisitorData();
console.log('Visitor test assignments:', visitorData.visitorTests);
}
} catch (error) {
console.error('❌ Failed to update Shoplift consent:', error);
}
}
},
setupListeners() {
// Listen for consent changes
window.OneTrust.OnConsentChanged(() => {
console.log('OneTrust consent changed, updating Shoplift...');
this.syncConsent();
});
// Also listen for the banner close event
window.OptanonWrapper = window.OptanonWrapper || function() {};
const originalWrapper = window.OptanonWrapper;
window.OptanonWrapper = function() {
originalWrapper();
OneTrustShopliftBridge.syncConsent();
};
},
// Utility method to check current status
getConsentStatus() {
return {
oneTrustReady: !!window.OneTrust,
activeGroups: window.OnetrustActiveGroups || 'none',
analyticsConsent: this.checkAnalyticsConsent(),
shopliftReady: !!window.shoplift
};
}
};
// Initialize on page load
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', () => {
OneTrustShopliftBridge.initialize();
});
} else {
OneTrustShopliftBridge.initialize();
}
// Expose for debugging
window.OneTrustShopliftBridge = OneTrustShopliftBridge;
OneTrust Configuration
Finding Your Category IDs
Log in to your OneTrust dashboard
Navigate to Cookie Consent > Categorizations
Find your Performance/Analytics category
Note the category ID (e.g., C0002)
Testing Your Integration
Debug Console Commands
Test your integration using these console commands:
// Check integration status
OneTrustShopliftBridge.getConsentStatus();
// Manually test consent states
// Grant consent
window.shoplift.setAnalyticsConsent(true);
// Revoke consent
window.shoplift.setAnalyticsConsent(false);
// Check current OneTrust groups
console.log('Active OneTrust groups:', window.OnetrustActiveGroups);
// Check Shoplift visitor data
console.log('Shoplift visitor:', window.shoplift.getVisitorData());
Testing Consent Scenarios
First-time visitor (no consent)
Clear cookies and local storage
Verify banner appears
Confirm no analytics tracking before consent
Accepting analytics cookies
Accept performance cookies in OneTrust banner
Verify Shoplift receives consent signal
Check that test data is being tracked
Rejecting analytics cookies
Reject performance cookies
Verify test variants still display
Confirm no analytics data is sent
Changing consent mid-session
Use OneTrust preference center to toggle consent
Verify Shoplift updates accordingly
Last updated
Was this helpful?