Entwicklung 'Visit Duration: Scenarien'
- Visit Duration
- Entwicklung 'Visit Duration Teil 1'
- Entwicklung 'Visit Duration Teil 2'
- Entwicklung 'Visit Duration: Scenarien'.
Folgend sind die unterschiedlichen Scenarien.
Vier Scenarios und zwei vereinfachte Scenario
Diese Vorlagen sind nicht 1:1 zum Übernehmen, und müssten der Logik entsprechend zum Original ergänzt und angepasst werden – ist also Entwicklungssache.
1. Tracking und 5-Minuten-Inaktivitätstimer bei Scroll-Aktivität starten
Das mit nach 5 Minuten Inaktivität wird die Sitzung automatisch beendet, ist vor allem der Hinsicht entstanden, dass Sitzungen nicht abgeschlossen wurden. Das sollte der neuen Entwicklung verbessert sein und ist daher nicht mehr implementiert.
// 1) Tracking und 5-Minuten-Inaktivitätstimer bei Scroll-Aktivität starten
(function() {
var ajaxUrl = '" . esc_url(admin_url('admin-ajax.php')) . "';
if (!ajaxUrl) {
console.error('AJAX-URL konnte nicht geladen werden.');
return;
}
window.ajaxUrl = ajaxUrl;
window.uniqueId = 'id-' + Math.random().toString(36).substr(2, 16);
var isTabActive = true;
var isUserInteracted = false;
let inactivityTimeout;
const inactivityDelay = 5 * 60 * 1000; // 5 Minuten Inaktivität
// Funktion zum Starten des Besuchs
function startVisitTracking() {
if (!isUserInteracted) {
isUserInteracted = true;
console.log('Benutzer hat interagiert. Tracking beginnt in 3 Sekunden...');
setTimeout(function() {
console.log('3 Sekunden Verzögerung vorbei. Tracking beginnt jetzt.');
fetch(window.ajaxUrl + '?action=start_visit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ unique_id: window.uniqueId, page_title: document.title })
}).catch(err => console.error('Fehler beim Start des Besuchs:', err));
resetInactivityTimer(); // Timer zurücksetzen
}, 3000);
}
}
// Funktion zum Zurücksetzen des Inaktivitätstimers
function resetInactivityTimer() {
clearTimeout(inactivityTimeout);
inactivityTimeout = setTimeout(endSessionDueToInactivity, inactivityDelay);
console.log('Inaktivitätstimer zurückgesetzt.');
}
// Funktion zum Beenden des Besuchs wegen Inaktivität
function endSessionDueToInactivity() {
if (window.uniqueId && window.ajaxUrl) {
const payload = JSON.stringify({
unique_id: window.uniqueId,
end_time: Date.now()
});
const beaconSuccess = navigator.sendBeacon(window.ajaxUrl + '?action=update_visit_duration', payload);
if (!beaconSuccess) {
const xhr = new XMLHttpRequest();
xhr.open('POST', window.ajaxUrl + '?action=update_visit_duration', false);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(payload);
}
console.log('Besuch beendet wegen Inaktivität.');
}
}
// Externe Links abfangen
document.addEventListener('click', function(event) {
const target = event.target.closest('a');
if (target && target.target === '_blank') {
console.log('Externer Link in neuem Tab geöffnet. Sitzung bleibt aktiv.');
isTabActive = true;
}
});
// Auf Scroll-Aktivität setzen inklusive Track-Start
document.addEventListener('scroll', function() {
startVisitTracking();
resetInactivityTimer(); // Inaktivitätstimer bei jeder Benutzerinteraktion zurücksetzen
});
window.addEventListener('beforeunload', sendEndVisit);
// Beenden des Besuchs, wenn die Seite verlassen wird
function sendEndVisit() {
if (window.uniqueId && window.ajaxUrl) {
const payload = JSON.stringify({
unique_id: window.uniqueId,
end_time: Date.now()
});
const beaconSuccess = navigator.sendBeacon(window.ajaxUrl + '?action=update_visit_duration', payload);
if (!beaconSuccess) {
const xhr = new XMLHttpRequest();
xhr.open('POST', window.ajaxUrl + '?action=update_visit_duration', false);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(payload);
}
}
}
})();
- Vorteile:
- Weniger unnötige Tracking-Anfragen, da nur Benutzer mit tatsächlicher Interaktion (Scrollen) getrackt werden.
- Reduziert die Belastung des Servers und Datenbankeinträge.
- Gut geeignet für Inhalte, bei denen Benutzeraktivität (z. B. Lesen, Scrollen) erforderlich ist, um den Inhalt wahrzunehmen.
- Nachteile:
- Besucher, die nicht scrollen (z. B. wenn sie den Inhalt vollständig auf einem Bildschirm sehen), werden gar nicht erfasst.
- Inaktivitätstimer läuft erst nach der ersten Interaktion, sodass Zeit davor unberücksichtigt bleibt.
2. Tracking-Start bei Scroll-Aktivität und 5-Minuten-Inaktivitätstimer sofort starten
Das ist welches dem Plug-in aktuell implementiert ist.
// 2) Tracking-Start bei Scroll-Aktivität und 5-Minuten-Inaktivitätstimer sofort starten
(function() {
var ajaxUrl = '" . esc_url(admin_url('admin-ajax.php')) . "';
if (!ajaxUrl) {
console.error('AJAX-URL konnte nicht geladen werden.');
return;
}
window.ajaxUrl = ajaxUrl;
window.uniqueId = 'id-' + Math.random().toString(36).substr(2, 16);
var isTabActive = true;
var isUserInteracted = false;
let inactivityTimeout;
const inactivityDelay = 5 * 60 * 1000; // 5 Minuten Inaktivität
// Funktion zum Starten des Besuchs
function startVisitTracking() {
if (!isUserInteracted) {
isUserInteracted = true;
console.log('Benutzer hat interagiert. Tracking beginnt in 3 Sekunden...');
setTimeout(function() {
console.log('3 Sekunden Verzögerung vorbei. Tracking beginnt jetzt.');
fetch(window.ajaxUrl + '?action=start_visit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ unique_id: window.uniqueId, page_title: document.title })
}).catch(err => console.error('Fehler beim Start des Besuchs:', err));
}, 3000);
}
}
// Funktion zum Zurücksetzen des Inaktivitätstimers
function resetInactivityTimer() {
clearTimeout(inactivityTimeout);
inactivityTimeout = setTimeout(endSessionDueToInactivity, inactivityDelay);
console.log('Inaktivitätstimer zurückgesetzt.');
}
// Funktion zum Beenden des Besuchs wegen Inaktivität
function endSessionDueToInactivity() {
if (window.uniqueId && window.ajaxUrl) {
const payload = JSON.stringify({
unique_id: window.uniqueId,
end_time: Date.now()
});
const beaconSuccess = navigator.sendBeacon(window.ajaxUrl + '?action=update_visit_duration', payload);
if (!beaconSuccess) {
const xhr = new XMLHttpRequest();
xhr.open('POST', window.ajaxUrl + '?action=update_visit_duration', false);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(payload);
}
console.log('Besuch beendet wegen Inaktivität.');
}
}
// Externe Links abfangen
document.addEventListener('click', function(event) {
const target = event.target.closest('a');
if (target && target.target === '_blank') {
console.log('Externer Link in neuem Tab geöffnet. Sitzung bleibt aktiv.');
isTabActive = true;
}
});
// Inaktivitätstimer direkt nach Seitenaufruf starten
resetInactivityTimer();
// Auf Scroll-Aktivität setzen, um Tracking zu starten
document.addEventListener('scroll', function() {
startVisitTracking();
});
// Besuch beenden, wenn die Seite verlassen wird
window.addEventListener('beforeunload', sendEndVisit);
function sendEndVisit() {
if (window.uniqueId && window.ajaxUrl) {
const payload = JSON.stringify({
unique_id: window.uniqueId,
end_time: Date.now()
});
const beaconSuccess = navigator.sendBeacon(window.ajaxUrl + '?action=update_visit_duration', payload);
if (!beaconSuccess) {
const xhr = new XMLHttpRequest();
xhr.open('POST', window.ajaxUrl + '?action=update_visit_duration', false);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(payload);
}
}
}
})();
- Vorteile:
- Der Inaktivitätstimer beginnt sofort, unabhängig davon, ob der Benutzer interagiert, wodurch das Zeitfenster bis zur ersten Interaktion berücksichtigt wird.
- Tracking erfasst nur aktive Benutzer (ab Scrollen), was die Datenqualität bei Interaktionen erhöht.
- Guter Kompromiss für Szenarien, bei denen die Inaktivitätszeit ab Seiteneintritt relevant ist.
- Nachteile:
- Benutzer, die die Seite nur passiv betrachten, ohne zu scrollen, werden nicht erfasst.
- Kann etwas verwirrend sein, wenn der Timer unabhängig vom Tracking läuft.
3. Track-Start sofort (ohne Scrollen) und 5-Minuten-Timer mit Scrollen starten
// 3) Track-Start sofort (ohne Scrollen) und 5-Minuten-Timer mit Scrollen starten
(function() {
var ajaxUrl = '" . esc_url(admin_url('admin-ajax.php')) . "';
if (!ajaxUrl) {
console.error('AJAX-URL konnte nicht geladen werden.');
return;
}
window.ajaxUrl = ajaxUrl;
window.uniqueId = 'id-' + Math.random().toString(36).substr(2, 16);
var isTabActive = true;
var isUserInteracted = false;
let inactivityTimeout;
const inactivityDelay = 5 * 60 * 1000; // 5 Minuten Inaktivität, individuell anpassbar
// Funktion zum Starten des Besuchs
function startVisitTracking() {
if (!isUserInteracted) {
isUserInteracted = true;
console.log('Benutzer hat interagiert. Tracking beginnt in 3 Sekunden...');
setTimeout(function() {
console.log('3 Sekunden Verzögerung vorbei. Tracking beginnt jetzt.');
fetch(window.ajaxUrl + '?action=start_visit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ unique_id: window.uniqueId, page_title: document.title })
}).catch(err => console.error('Fehler beim Start des Besuchs:', err));
resetInactivityTimer(); // Timer zurücksetzen
}, 3000);
}
}
// Funktion zum Zurücksetzen des Inaktivitätstimers
function resetInactivityTimer() {
clearTimeout(inactivityTimeout);
inactivityTimeout = setTimeout(endSessionDueToInactivity, inactivityDelay);
console.log('Inaktivitätstimer zurückgesetzt.');
}
// Funktion zum Beenden des Besuchs wegen Inaktivität
function endSessionDueToInactivity() {
if (window.uniqueId && window.ajaxUrl) {
const payload = JSON.stringify({
unique_id: window.uniqueId,
end_time: Date.now()
});
const beaconSuccess = navigator.sendBeacon(window.ajaxUrl + '?action=update_visit_duration', payload);
if (!beaconSuccess) {
const xhr = new XMLHttpRequest();
xhr.open('POST', window.ajaxUrl + '?action=update_visit_duration', false);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(payload);
}
console.log('Besuch beendet wegen Inaktivität.');
}
}
// Externe Links abfangen
document.addEventListener('click', function(event) {
const target = event.target.closest('a');
if (target && target.target === '_blank') {
console.log('Externer Link in neuem Tab geöffnet. Sitzung bleibt aktiv.');
isTabActive = true;
}
});
// Start des Besuchs sofort nach Seitenaufruf
startVisitTracking();
// Nur auf Scroll-Aktivität setzen
document.addEventListener('scroll', function() {
resetInactivityTimer(); // Inaktivitätstimer bei jeder Benutzerinteraktion zurücksetzen
});
window.addEventListener('beforeunload', sendEndVisit);
// Beenden des Besuchs, wenn die Seite verlassen wird
function sendEndVisit() {
if (window.uniqueId && window.ajaxUrl) {
const payload = JSON.stringify({
unique_id: window.uniqueId,
end_time: Date.now()
});
const beaconSuccess = navigator.sendBeacon(window.ajaxUrl + '?action=update_visit_duration', payload);
if (!beaconSuccess) {
const xhr = new XMLHttpRequest();
xhr.open('POST', window.ajaxUrl + '?action=update_visit_duration', false);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(payload);
}
}
}
})();
- Vorteile:
- Alle Besucher werden sofort erfasst, auch solche, die nur schauen und nicht scrollen.
- Der Timer startet erst bei der ersten Interaktion, was die Relevanz der Inaktivitätszeit erhöht (fokussiert auf echte Nutzung).
- Gut geeignet, wenn alle Besucher, unabhängig von Interaktionen, getrackt werden sollen.
- Nachteile:
- Erhöhte Serverlast durch sofortiges Tracking aller Benutzer.
- Timer startet verspätet, was zu Lücken in der Sitzungsdauer führen kann.
4. Track-Start sofort (ohne Scrollen) und 5-Minuten-Timer sofort starten
// 4) Track-Start sofort (ohne Scrollen) und 5-Minuten-Timer sofort starten
(function() {
var ajaxUrl = '" . esc_url(admin_url('admin-ajax.php')) . "';
if (!ajaxUrl) {
console.error('AJAX-URL konnte nicht geladen werden.');
return;
}
window.ajaxUrl = ajaxUrl;
window.uniqueId = 'id-' + Math.random().toString(36).substr(2, 16);
var isTabActive = true;
var isUserInteracted = false;
let inactivityTimeout;
const inactivityDelay = 5 * 60 * 1000; // 5 Minuten Inaktivität
// Funktion zum Starten des Besuchs
function startVisitTracking() {
if (!isUserInteracted) {
isUserInteracted = true;
console.log('Benutzer hat interagiert. Tracking beginnt in 3 Sekunden...');
setTimeout(function() {
console.log('3 Sekunden Verzögerung vorbei. Tracking beginnt jetzt.');
fetch(window.ajaxUrl + '?action=start_visit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ unique_id: window.uniqueId, page_title: document.title })
}).catch(err => console.error('Fehler beim Start des Besuchs:', err));
resetInactivityTimer(); // Timer zurücksetzen
}, 3000);
}
}
// Funktion zum Zurücksetzen des Inaktivitätstimers
function resetInactivityTimer() {
clearTimeout(inactivityTimeout);
inactivityTimeout = setTimeout(endSessionDueToInactivity, inactivityDelay);
console.log('Inaktivitätstimer zurückgesetzt.');
}
// Funktion zum Beenden des Besuchs wegen Inaktivität
function endSessionDueToInactivity() {
if (window.uniqueId && window.ajaxUrl) {
const payload = JSON.stringify({
unique_id: window.uniqueId,
end_time: Date.now()
});
const beaconSuccess = navigator.sendBeacon(window.ajaxUrl + '?action=update_visit_duration', payload);
if (!beaconSuccess) {
const xhr = new XMLHttpRequest();
xhr.open('POST', window.ajaxUrl + '?action=update_visit_duration', false);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(payload);
}
console.log('Besuch beendet wegen Inaktivität.');
}
}
// Externe Links abfangen
document.addEventListener('click', function(event) {
const target = event.target.closest('a');
if (target && target.target === '_blank') {
console.log('Externer Link in neuem Tab geöffnet. Sitzung bleibt aktiv.');
isTabActive = true;
}
});
// Start des Besuchs sofort nach Seitenaufruf und sofortiges Zurücksetzen des Inaktivitätstimers
startVisitTracking();
// Nur auf Scroll-Aktivität setzen (Inaktivitätstimer zurücksetzen)
document.addEventListener('scroll', function() {
resetInactivityTimer(); // Inaktivitätstimer bei jeder Benutzerinteraktion zurücksetzen
});
window.addEventListener('beforeunload', sendEndVisit);
// Beenden des Besuchs, wenn die Seite verlassen wird
function sendEndVisit() {
if (window.uniqueId && window.ajaxUrl) {
const payload = JSON.stringify({
unique_id: window.uniqueId,
end_time: Date.now()
});
const beaconSuccess = navigator.sendBeacon(window.ajaxUrl + '?action=update_visit_duration', payload);
if (!beaconSuccess) {
const xhr = new XMLHttpRequest();
xhr.open('POST', window.ajaxUrl + '?action=update_visit_duration', false);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(payload);
}
}
}
})();
- Vorteile:
- Maximale Erfassung aller Besucher und sofortige Messung der Inaktivität.
- Einfachstes und klarstes Szenario ohne Abhängigkeit von Benutzerinteraktionen.
- Ideal für Inhalte, bei denen alle Sitzungen getrackt werden sollen, unabhängig von der Interaktion (z. B. für Landing Pages, statische Seiten).
- Nachteile:
- Erhöhte Serverlast durch sofortiges Tracking aller Benutzer.
- Kann zu ungenauen Daten führen, wenn Benutzer sofort die Seite verlassen, da keine Interaktion notwendig ist.
Emfpehlungen
Empfehlung: Szenario 4
- Begründung:
- Szenario 4 ist universell und deckt alle Besucher zuverlässig ab, unabhängig von Interaktionen. Es ist am besten geeignet, wenn eine vollständige Erfassung aller Sitzungen das Ziel ist und der Fokus auf der Zeit auf der Seite liegt.
- Für spezifische Use Cases wie Blogposts oder Seiten, bei denen Benutzerinteraktion der Fokus ist, wäre Szenario 1 oder 2 besser.
Empfehlung: Szenario 2
- Saubere Sitzungsbeendigung: Kein Tracking übermäßig langer, inaktiver Sitzungen.
- Echte Interaktionen werden getrackt: Tracking startet nur bei Scrollen, was Bots und unbeteiligte Besucher herausfiltert.
- Serverlast wird reduziert: Der Timer läuft unabhängig von Tracking-Interaktionen, sodass Sitzungen ohne echte Aktivität zeitnah enden.
Insgesamt bietet Szenario 2 eine solide Grundlage, um Besuche effektiv und ressourcenschonend zu tracken. Es ist besonders geeignet, wenn dir Sitzungsbeendigung bei Inaktivität wichtiger ist als das direkte Tracken aller Besuche.
Vereinfachtes Scenario
Die 5-Minuten-Inaktivitätstimer wird komplett weggelassen, somit fällt ein großer Teil des Codes weg, insbesondere die Timer-Funktionen (resetInactivityTimer
, endSessionDueToInactivity
) und die Logik, die diesen Timer verwaltet. Der Code wäre dann deutlich schlanker und fokussiert sich ausschließlich auf den Start des Trackings bei Interaktion (z. B. Scrollen) sowie die Beendigung der Sitzung beim Schließen der Seite:
// Vereinfachtes Scenario: Kein 5-Minuten-Inaktivitätstimer und Tracking nur bei Scroll-Aktivität
(function() {
var ajaxUrl = '" . esc_url(admin_url('admin-ajax.php')) . "';
if (!ajaxUrl) {
console.error('AJAX-URL konnte nicht geladen werden.');
return;
}
window.ajaxUrl = ajaxUrl;
window.uniqueId = 'id-' + Math.random().toString(36).substr(2, 16);
var isUserInteracted = false;
// Funktion zum Starten des Besuchs
function startVisitTracking() {
if (!isUserInteracted) {
isUserInteracted = true;
console.log('Benutzer hat interagiert. Tracking beginnt in 3 Sekunden...');
setTimeout(function() {
console.log('3 Sekunden Verzögerung vorbei. Tracking beginnt jetzt.');
fetch(window.ajaxUrl + '?action=start_visit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ unique_id: window.uniqueId, page_title: document.title })
}).catch(err => console.error('Fehler beim Start des Besuchs:', err));
}, 3000);
}
}
// Externe Links abfangen
document.addEventListener('click', function(event) {
const target = event.target.closest('a');
if (target && target.target === '_blank') {
console.log('Externer Link in neuem Tab geöffnet.');
}
});
// Tracking bei Scroll-Aktivität starten
document.addEventListener('scroll', function() {
startVisitTracking();
});
window.addEventListener('beforeunload', sendEndVisit);
// Beenden des Besuchs, wenn die Seite verlassen wird
function sendEndVisit() {
if (window.uniqueId && window.ajaxUrl) {
const payload = JSON.stringify({
unique_id: window.uniqueId,
end_time: Date.now()
});
const beaconSuccess = navigator.sendBeacon(window.ajaxUrl + '?action=update_visit_duration', payload);
if (!beaconSuccess) {
const xhr = new XMLHttpRequest();
xhr.open('POST', window.ajaxUrl + '?action=update_visit_duration', false);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(payload);
}
}
}
})();
- 5-Minuten-Inaktivitätstimer entfernt:
- Alle Timer-Funktionen (
resetInactivityTimer
,endSessionDueToInactivity
) und die zugehörige Logik wurden entfernt.
- Alle Timer-Funktionen (
- Tracking nur bei Scroll-Aktivität:
- Das Tracking startet erst nach einer Scroll-Aktion (mit 3 Sekunden Verzögerung).
- Beibehaltung der Sitzungserfassung beim Verlassen der Seite:
- Die Sitzung wird weiterhin beim Verlassen der Seite mit
beforeunload
beendet.
- Die Sitzung wird weiterhin beim Verlassen der Seite mit
- Kürzerer, übersichtlicherer Code:
- Der Code konzentriert sich rein auf die Interaktionsverfolgung und das Ende der Sitzung.
Vorteile dieser Version:
- Einfachere Logik, da kein Timer mehr verwaltet werden muss.
- Bots, die nicht scrollen, werden effektiv herausgefiltert.
- Reduzierter Overhead durch den Wegfall von wiederholten Timer-Interaktionen.
Potenzieller Nachteil:
- Ohne den Timer werden Sitzungen nicht automatisch beendet, wenn ein Benutzer nach dem Scrollen längere Zeit inaktiv bleibt.
Sehr vereinfachtes Scenario
Wenn das Tracking sofort nach dem Seitenaufruf beginnen soll, ohne dass eine Scroll-Interaktion notwendig ist, dann wird der Code noch schlanker. Die Logik für die Scroll-Aktivität entfällt vollständig:
// Sehr vereinfachtes Scenario: Tracking startet sofort nach Seitenaufruf und ohne Logik für die Scroll-Aktivität
(function() {
var ajaxUrl = '" . esc_url(admin_url('admin-ajax.php')) . "';
if (!ajaxUrl) {
console.error('AJAX-URL konnte nicht geladen werden.');
return;
}
window.ajaxUrl = ajaxUrl;
window.uniqueId = 'id-' + Math.random().toString(36).substr(2, 16);
// Funktion zum Starten des Besuchs
function startVisitTracking() {
console.log('Tracking beginnt in 3 Sekunden...');
setTimeout(function() {
console.log('3 Sekunden Verzögerung vorbei. Tracking beginnt jetzt.');
fetch(window.ajaxUrl + '?action=start_visit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ unique_id: window.uniqueId, page_title: document.title })
}).catch(err => console.error('Fehler beim Start des Besuchs:', err));
}, 3000);
}
// Start des Besuchs sofort nach Seitenaufruf
startVisitTracking();
window.addEventListener('beforeunload', sendEndVisit);
// Beenden des Besuchs, wenn die Seite verlassen wird
function sendEndVisit() {
if (window.uniqueId && window.ajaxUrl) {
const payload = JSON.stringify({
unique_id: window.uniqueId,
end_time: Date.now()
});
const beaconSuccess = navigator.sendBeacon(window.ajaxUrl + '?action=update_visit_duration', payload);
if (!beaconSuccess) {
const xhr = new XMLHttpRequest();
xhr.open('POST', window.ajaxUrl + '?action=update_visit_duration', false);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(payload);
}
}
}
})();
- Tracking startet sofort nach Seitenaufruf:
- Der Aufruf von
startVisitTracking()
erfolgt direkt beim Laden der Seite. - Die Scroll-Logik (
document.addEventListener('scroll')
) entfällt komplett.
- Der Aufruf von
- Beibehaltung der 3-Sekunden-Verzögerung:
- Die 3-Sekunden-Verzögerung bleibt, um flüchtige oder Bot-ähnliche Aufrufe weiterhin zu ignorieren.
Vorteile dieser Variante:
- Einfachheit: Das Tracking wird direkt nach dem Laden der Seite aktiviert, ohne zusätzliche Events wie Scrollen.
- Keine Interaktionsabhängigkeit: Auch Nutzer, die nicht scrollen, werden erfasst.
- Effektivität gegen Bots: Die 3-Sekunden-Verzögerung stellt sicher, dass viele Bots ignoriert werden und "Fluggäste" nicht aufscheinen.
Einschränkung:
- Es werden auch Nutzer getrackt, die die Seite nur kurz betrachten, ohne aktiv zu interagieren. Wenn das Ziel jedoch ist, die maximale Anzahl an echten Besuchen zu erfassen, ist dies eine sinnvolle Lösung.