Implementierung - SEO - 15.08.2025
This commit is contained in:
+45
-1
@@ -6,19 +6,63 @@
|
||||
declare global {
|
||||
interface Window {
|
||||
dataLayer: any[];
|
||||
gtmLoaded?: boolean;
|
||||
}
|
||||
}
|
||||
|
||||
// GTM ID
|
||||
const GTM_ID = 'GTM-NQK6ZV7N';
|
||||
|
||||
// Initialisiere dataLayer falls nicht vorhanden
|
||||
if (typeof window !== 'undefined' && !window.dataLayer) {
|
||||
window.dataLayer = [];
|
||||
}
|
||||
|
||||
// Prüft, ob Marketing-Cookies aktiviert sind
|
||||
const isMarketingEnabled = (): boolean => {
|
||||
try {
|
||||
const cookieSettings = localStorage.getItem('cookieSettings');
|
||||
if (!cookieSettings) return false;
|
||||
|
||||
const settings = JSON.parse(cookieSettings);
|
||||
return settings.marketing === true || settings.analytics === true;
|
||||
} catch (error) {
|
||||
console.error('Error checking cookie settings:', error);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
// Lädt Google Tag Manager nur nach Zustimmung
|
||||
export const loadGoogleTagManager = (): void => {
|
||||
if (!isMarketingEnabled() || window.gtmLoaded) {
|
||||
return;
|
||||
}
|
||||
|
||||
// GTM Script laden
|
||||
const script = document.createElement('script');
|
||||
script.innerHTML = `
|
||||
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||
})(window,document,'script','dataLayer','${GTM_ID}');
|
||||
`;
|
||||
document.head.appendChild(script);
|
||||
|
||||
// GTM noscript iframe
|
||||
const noscript = document.createElement('noscript');
|
||||
noscript.innerHTML = `<iframe src="https://www.googletagmanager.com/ns.html?id=${GTM_ID}"
|
||||
height="0" width="0" style="display:none;visibility:hidden"></iframe>`;
|
||||
document.body.insertBefore(noscript, document.body.firstChild);
|
||||
|
||||
window.gtmLoaded = true;
|
||||
};
|
||||
|
||||
/**
|
||||
* Push event to GTM dataLayer
|
||||
*/
|
||||
export const pushToDataLayer = (data: Record<string, any>) => {
|
||||
if (typeof window !== 'undefined' && window.dataLayer) {
|
||||
if (typeof window !== 'undefined' && window.dataLayer && isMarketingEnabled()) {
|
||||
window.dataLayer.push(data);
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user