Implementierung - SEO - 15.08.2025

This commit is contained in:
2025-08-15 18:20:45 +02:00
parent 3db6bafa0a
commit 92095892b2
12 changed files with 338 additions and 83 deletions
+45 -1
View File
@@ -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);
}
};