Очень мне понравилась идея сегментирования посетителей с помощью меченных ссылок.
В прошлом посте я показал как метить ссылки при кросспостинге в Livejournal.
Сегодня я расскажу и покажу как пометить RSS-фид.
Зачем это надо? Ваш фид видят большое число пользователей. С помощью rss-клиентов или rss-агрегаторов - не важно. Ведь хочется же оценить толк от RSS-ленты? Часто ли переходят из ленты к вам в блог?
Такие же вопросы интересовали и меня.
В результате нескольких часов мучений работающее решение было найдено - весь мой фид был помечен (ссылки на статьи, внутренние ссылки на другие страницы блога).
Как это сделать - читайте под катом.
Внимание: данный способ предполагает прямое редактирование кода движка блога. Вы можете скачать и установить плагин AddGATagsToRss, и получить весь тот же функционал без лишних хлопот.
Итак, начнем.
Задача: добиться того, чтобы все ссылки в rss-ленте, ведущие на сайт, были помечены метками Google Analytics.
Ссылки могут быть двух видов:
- ссылки самой rss-ленты (ссылка на источник ленты, на пост, на комментарии к посту)
- ссылки в контенте (вы указали в посте ссылку на другую страницу сайта, внизу поста могут выводиться связанные записи) - их тоже будет полезным пометить
Займемся ссылками первого вида.
Шаг №1
Откроем файл /wp-includes/feed.php
Найдем функцию get_bloginfo_rss, которая выдает информацию о блоге (в т.ч. ссылку на блог).
function get_bloginfo_rss($show = '') {
$info = strip_tags(get_bloginfo($show));
return apply_filters('get_bloginfo_rss', convert_chars($info), $show);
}
Добавим немножко кода (измененное выделено жирным):
function get_bloginfo_rss($show = '') {
$info = strip_tags(get_bloginfo($show));
$result=convert_chars($info);
if($show=='url'):
return apply_filters('get_bloginfo_rss', $result.'?utm_source=feed&utm_medium=feed&utm_campaign=feed', $show);
else:
return apply_filters('get_bloginfo_rss', $result, $show);
endif;
}
Теперь фид будет ссылаться на блог меченной ссылкой.
Шаг №2
Найдем функцию the_permalink_rss, которая выдает ссылку на пост.
function the_permalink_rss() {
echo apply_filters('the_permalink_rss', get_permalink());
}
Подправим ее таким образом (измененное выделено жирным)
function the_permalink_rss() {
echo apply_filters('the_permalink_rss', get_permalink().'?utm_source=feed&utm_medium=feed&utm_campaign=feed');
}
Ниже добавим новую функцию:
function the_commentslink_rss() {
echo apply_filters('the_commentslink_rss', get_permalink().'?utm_source=feed&utm_medium=feed&utm_campaign=feed#comments');
}
Открываем файл /wp-includes/feed-rss2.php, находим там строчку
<comments>...</comments>
Заменяем ее на следующую:
<comments><?php the_commentslink_rss() ?></comments>
Теперь в нашем фиде ссылки на пост и комментарии будут меченными.
Шаг №3
Дошло дело и до второго вида ссылок - внутренние ссылки в тексте статей.
Используем нашу функцию addGAtags из прошло поста
function addGAtags($text,$tag_source,$tag_medium,$tag_campaign)
{
$stringAG="utm_source=".$tag_source."&utm_medium=".$tag_medium."&utm_campaign=".$tag_campaign;
$patterns=array(
"#[\"']{1}(http://((www.)?chenado.net.*?)(/\?){1}(.*?)?(\#comment([s0-9\-]*))?)[\"']{1}#",
"#[\"']{1}(http://((www.)?chenado.net.*?)/(\#comment([s0-9\-]*))?)[\"']{1}#"
);
$replaces=array(
"http://$2/?$5&".$stringAG."$6",
"http://$2/?".$stringAG."$4"
);
return preg_replace($patterns,$replaces,$text);
}
Она должна быть добавлена в файл /wp-includes/link-template.php
Находим в файле /wp-includes/post-template.php функцию the_content. Под нею добавляем новую функцию (по сути это копия функции the_content только с одной добавленной строчкой - она выделена жирным):
function the_rss_content($more_link_text = null, $stripteaser = 0, $more_file = '') {
$content = get_the_content($more_link_text, $stripteaser, $more_file);
$content = apply_filters('the_content', $content);
$content=addGAtags($content,'feed','feed','feed');
$content = str_replace(']]>', ']]>', $content);
echo $content;
}
В файле /wp-includes/feed-rss2.php находим строчку
<content:encoded><![CDATA[<?php the_content() ?>]]></content:encoded>
и меняем ее на:
<content:encoded><![CDATA[<?php the_rss_content() ?>]]></content:encoded>
Вуаля!!! Теперь все ссылки, ведущие на сайт, внутри статей будут помечены метками Googla Analytics.
Вот пример отображения поста с моего блога в Google Reader. С помощью плагина Web Developer я отобразил параметры ссылки. Все ссылки помечены
Осталось обратить ваше внимание на ряд важных пунктов:
- все изменяемые файлы следует перед экспериментами бекапить
- эксперименты лучше проводить на своем чистом фиде http://yoursite.domain/feed/, потому как FeedBurner и иже с ним обновляют ленту периодически, и внесенные вами исправления вы сразу не увидите. Также если вы используете плагин FeedBurner FeedSmith, который редиректит на feedburner.com, не забудьте его отключить на время экспериментов
- пользуйтесь валидатором фидов - поможет выявить ошибки экспериментов
Вопросы и пожелания приветствуются
И если кому оказался полезным данный способ – не забудьте отписаться в комментариях.
Популярность: 5%
Связанные записи
Распечатать запись

И для кого тогда реалиована система хуков в Вордпрессе, если наживую менять код там, где навешены фильтры?
Вместо первого изменения открываем function.php темы (или бацаем плагинчик) и вешаем на фильтр функцию с нужными действиями add_filter(’get_bloginfo_rss’,’shunt_rss’)
Аналогично по остальны пунктам. И тогда не придется делать бессмысленную последнюю функцию, а просто проверить на is_feed по фильтру the_content.
Сергей, спасибо за подсказку. С хуками движка дел не имел. Но теперь точно разберусь и укажу более гибкое решение в посте.