Zliczanie kliknięć w zewnętrzne linki

Mam model Entry z m.in. z polem url , w widoku generuję linki z tym url i chciałbym w modelu dodać pole click_count i zwiększać je przy kliknięciu w link. Jak do tego się zabrać gdy link prowadzi do strony poza naszą aplikację?

ps. po pewnej liczbie postów można by na forum wyłączyć to zabezpieczenie spambotowe z pytaniem o dzień tygodnia.

Posrednia akcja ktore redirectuje na docelowy zewnetrzny link?

Najłatwiej zrobić to na poziomie JavaScriptu. Czy faktycznie potrzebujesz czegoś więcej?

Popatrz na gotowe narzędzia, na pewno coś jest (może nawet w Google Analytics) co śledzi to. Na poziomie JavaScriptu musi być to raczej zrobione, redirect będzie co prawda działał OK, albe będzie upierdliwy i nie SEO-friendly, ogólnie dość niegrzeczna rzecz do zrobienia :wink:

Robią to Google i Facebook, niestety.

Zrobiłem to w miarę prosto (pewnie zacznie się komplikować jak będę chciał unikalne klinięcia itd.)
Stworzyłem model Event (user_id, subject_id, action, date) i po after_save zwiększenie licznika w odpowiednim Entry.

I dałem taki kod w javascripcie:

$('.entry-title a.entry-url').click(function() { var entry_id = $(this).data('entry-id'); $.ajax({ type: "POST", url: "/events", data: {entry_id: entry_id}, }); });
Jak na razie zlicza mi ładnie kliknięcia.

Zwięźlej będzie:

$('.entry-title a.entry-url').click(function() { $.post("/events", { entry_id: $(this).data('entry-id')} ); });

Ja bym tu jeszcze dodał pomijanie zliczania gdy navigator.userAgent ma ciag Googlebot itp. O ile roboty wywołują akcje javascript, tego nie wiem i sam chętnie sie dowiem.

Przetestuj to na czymś “dalszym” od Twojej przeglądarki niż localhost. Może się okazać że przeglądarka zarzuci żądanie ajaxowe kiedy już będzie pewna że chce zmienić window.location.

Przetestowałem, jest ok.

Gdyby jednak @Tomash dobrze przewidział problem… http://support.google.com/analytics/bin/answer.py?hl=en&answer=1136920