มีสภาวะการแข่งขันเมื่อติดตามลิงก์ที่คลิกหรือไม่?

ฉันต้องการติดตามการคลิกที่ผู้ใช้บนเพจของฉัน แต่ฉันสับสนเล็กน้อย ดูรหัสนี้:

<a href="http://example.com" onClick=”_gaq.push(['_trackEvent', 'External Link', 'Twitter Link', 'Follow Us - Words']);”>Follow Us</a>

↑ จะเกิดอะไรขึ้นหากผู้ใช้ถูกเปลี่ยนเส้นทางไปที่ http://example.com ก่อนที่ Google Analytics จะติดตาม - แล้วจะเป็นอย่างไร? ฉันพูดถูกไหมที่ตัวอย่างนั้นมีสภาพการแข่งขัน?


person Dannyboy    schedule 14.07.2014    source แหล่งที่มา
comment
คุณสามารถชะลอการไปที่ไซต์ใหม่ได้ประมาณ 100 มิลลิวินาทีเพื่อให้แน่ใจว่าการติดตามจะเกิดขึ้น   -  person Huangism    schedule 15.07.2014
comment
ฉันเชื่อว่ามันควรจะยังคงดำเนินการ คุณลองแล้วหรือยัง? นอกจากนี้ คุณสามารถกำหนดเป้าหมายหน้าต่าง/แท็บใหม่เพื่อให้หน้าปัจจุบันยังคงเปิดอยู่ ฉันยังค่อนข้างแน่ใจว่าภายใน Google Analytics มีตัวเลือกสคริปต์เพื่อติดตามลิงก์และการคลิก   -  person Adjit    schedule 15.07.2014
comment
@Adjit _gaq.push เพียงผลักไปที่อาร์เรย์ JS มาตรฐาน จากนั้นจะต้องส่งคำขอ http เพิ่มเติมไปยังเซิร์ฟเวอร์ของ Google เท่าที่ฉันเข้าใจ - ใครเป็นคนทำก่อน: การติดตามหรือการเปลี่ยนเส้นทางเพจ และใช่ - ในบางกรณีมันอาจจะติดตาม - แต่ในบางกรณีการเปลี่ยนเส้นทางจะเร็วขึ้นใช่ไหม?   -  person Dannyboy    schedule 15.07.2014
comment
จริงๆ แล้วฉันไม่มีความคิด ซึ่งเป็นเหตุผลที่ฉันแนะนำให้คุณทดสอบ แต่ถ้าคุณต้องการเพิ่มการหน่วงเวลาสั้น ๆ เพื่อให้คำขอติดตามดูที่นี่ stackoverflow.com/questions/11366627/   -  person Adjit    schedule 15.07.2014
comment
ความเป็นไปได้ที่ซ้ำกันของ การติดตามเหตุการณ์ HitCallback ของ Google Analytics ไม่ทำงาน   -  person Blexy    schedule 15.07.2014


คำตอบ (2)


ไม่มีสภาพการแข่งขัน ตัวจัดการการคลิกถูกเรียกและดำเนินการอย่างสมบูรณ์ก่อนที่การนำทางเพจจะเริ่มต้น ตัวจัดการการคลิกที่สร้างคำขอ ajax ซึ่งการตอบสนองไม่สำคัญ คำร้องขอ ajax เริ่มต้นก่อนที่จะเริ่มการนำทางเพจ

อย่าหลงกลด้วยชื่อวิธีการ อ้างอิงจาก Google:

ฟังก์ชันนี้มีชื่อว่า push เพื่อให้อาร์เรย์สามารถใช้แทน _gaq ก่อนที่ Analytics จะโหลดเสร็จสมบูรณ์ ในขณะที่ Analytics กำลังโหลด คำสั่งจะถูกพุช/เข้าคิวบนอาร์เรย์ เมื่อ Analytics โหลดเสร็จแล้ว Analytics จะแทนที่อาร์เรย์ด้วยออบเจ็กต์ _gaq และดำเนินการคำสั่งที่อยู่ในคิวทั้งหมด การเรียก _gaq.push ครั้งต่อไปจะแก้ไขฟังก์ชันนี้ ซึ่งดำเนินการคำสั่งในขณะที่ถูกพุช

แม้ว่าในตอนแรก .push() จะเพียงแค่พุชคำสั่งลงในอาร์เรย์เท่านั้น เมื่อ Analytics โหลดแล้ว คำสั่งเหล่านั้นจะถูกดำเนินการทันที

person gilly3    schedule 14.07.2014
comment
ฉันรู้เกี่ยวกับการแปลงวัตถุอาร์เรย์-> แต่การติดตามการโทรยังคงเป็น afaik แบบอะซิงโครนัสใช่ไหม นี่คือตั๋วที่ฉันคิดว่ายืนยันว่า: - person Dannyboy; 15.07.2014
comment
@Dannyboy - ฉันชอบค้นหาด้วยตัวเอง ดังนั้นฉันจึงตรวจสอบในตัวดีบักเกอร์ ฉันก้าวผ่านโค้ดที่สร้างความสับสนของ Google และตรวจสอบว่ามีการสร้างบีคอน gif ก่อนที่ตัวจัดการการคลิกจะกลับมา เป็นแบบอะซิงโครนัสโดยที่ไม่รอการตอบกลับจากเซิร์ฟเวอร์ แต่โค้ดที่สร้างคำขอ (ผ่าน gif บีคอน) เป็นแบบซิงโครนัส - person gilly3; 15.07.2014
comment
ขอบคุณสำหรับการตรวจสอบสิ่งนี้! ฉันเข้าใจสิ่งนี้ถูกต้องหรือไม่ - ไม่มีการรับประกันว่า gif beacon ไปถึงเซิร์ฟเวอร์ของ Google ก่อนที่จะโหลดหน้าซ้ำ - person Dannyboy; 15.07.2014
comment
@Dannyboy - คำขอ http ถูกส่งไปอย่างไม่ต้องสงสัย เป็นไปได้ว่าเพจนั้นจะถูกโหลดซ้ำก่อนที่ Google จะได้รับคำขอ แต่แล้วไงล่ะ? เหตุใดจึงสำคัญหาก Google ได้รับคำขอหลังจากประมวลผลคำขอลิงก์ภายนอกแทนที่จะเป็นเมื่อก่อน - person gilly3; 18.07.2014

คุณสามารถทำได้:

ด้วย jQuery:

$('a').on('click', function(e){
    e.preventDefault();
    var $el = $(this);
    _gaq.push(['_trackEvent', 'External Link', 'Twitter Link', 'Follow Us - Words']);
    setTimeout(function(){
       window.location.href = $el.attr('href');
    }, 100);
});

หากไม่มี jQuery:

document.getElementById('someIdOfLink').addEventListener('click', function(){
   return false;
   var $el = this;
    _gaq.push(['_trackEvent', 'External Link', 'Twitter Link', 'Follow Us - Words']);
    setTimeout(function(){
       window.location.href = $el.getAttribute('href');
    }, 100);
});

หวังว่าจะช่วยคุณได้!

person Rubén Guerrero    schedule 14.07.2014