• Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Настройка целей Яндекс Метрика

hell0men

Новичок
Поскольку в сети информации по теме мало, решил описать простое решение, которое нашел без знания кода.

Цель "Добавление в корзину"
В настройках счетчика добавим цель JS-событие и зададим идентификатор цели.
Screenshot_1.png
Откроем шаблон footer.php и добавим после счетчика метрики скрипт
Код:
<!-- Yandex.Metrika goals-->
<script type="text/javascript">
jQuery( document ).ready( function ( $ ) {
    $( 'body' ).on( 'click', '.single_add_to_cart_button', function ( ) {
        yaCounterXXXXXXXX.reachGoal('ADDTOCART');
    } ).on( 'click', '.add_to_cart_button', function ( ) {
       yaCounterXXXXXXXX.reachGoal('ADDTOCART');
    } );
    $( 'body' ).on( 'click', '#place_order', function ( ) {
        yaCounterXXXXXXXX.reachGoal('PLACEORDER');
} );
} );
</script>
<!-- /Yandex.Metrika goals -->
Где XXXXXXXX - ваш номер счетчика метрики. added_to_cart - триггер, который вызывается после добавления товара в корзину.
console.log - выдает сообщение в консоль отладки когда функция срабатывает.

Цель "Завершение заказа"
Ставится на посещение страницы - endpoint. Решение нашел в сети. Видно на скриншоте выше. Оно не работает.
В коде мое решение с целью PLACEORDER, вешается на кнопку Оформить заказ.

Можно передавать в счетчик цену цели, то есть цену товара, но нужна переменная, которая его передаст. Я на первый взгляд ее не нашел, но думаю это тоже легко решается и кто-нибудь подскажет как это сделать без правки самого шаблона.
Screenshot_2.png
 
Последнее редактирование:

artemkomarov

Специалист
Местный
Извините за оффтоп, а почему не воспользуетесь платным решением где все уже сделано и работает как надо?
 

hell0men

Новичок
Наткнулся на рабочее бесплатное или почти рабочее, как оказалось. Даже два. Есть время допилить общими силами. Платных не видел.
 

hell0men

Новичок
Читал, пробовал, но чот не работает. Плагин бесплатный кстати есть этот.
 

artemkomarov

Специалист
Местный
Читал, пробовал, но чот не работает.
Эт странно, но не думаю что дело в сайте.
Кстати если не секрет почему яндекс метрика. Яндекс может от силы процентов 10% того что может гугл? Более того даже если вы настроите все сами что насчет отмененных заказов? учета остатков? а так же добавление удаление заказов из админ панели? Яндекс ни чего этого не учитывает.
 

hell0men

Новичок
У меня другое впечатление. Метрика удобнее и там и так на 70% больше того, что мне требуется :)
Мне нужно хотя бы учитывать входящую воронку и каналы. Дальше уже CRM можно настраивать, при желании. Тут точность не нужна.

Плагин для гугла выдает вот такую портянку. Врядле это скушает Яндекс. Сам гугл то ругается порой на него, просит перенастроить.
Код:
<script type="text/javascript">
jQuery(function($) {
tvc_lc="RUB";


              ga("require", "ec", "ec.js");
            ga("set", "&cu", tvc_lc);
            jQuery("button[class*=single_add_to_cart_button]").click(function() {
                            
                              // Enhanced E-commerce Add to cart clicks
                              ga("ec:addProduct", {
                                "id" : tvc_po.tvc_i,
                                "name": tvc_po.tvc_n,
                                "category" :tvc_po.tvc_c,
                                "price": tvc_po.tvc_p,
                                "quantity" :jQuery(this).parent().find("input[name=quantity]").val()
                              });
                              ga("ec:setAction", "add");
                              ga("send", "event", "Enhanced-Ecommerce","click", "add_to_cart_click", {"nonInteraction": 1});                             
            });
        

tvc_po={"tvc_id":"41698","tvc_i":"\u041d\u0421-0005839","tvc_n":"\u041a\u0440\u0443\u0433\u043b\u044b\u0439 \u043a\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0442\u043e\u0440 \u0432 \u043f\u043b\u0430\u0441\u0442\u0438\u043a\u043e\u0432\u043e\u043c \u043a\u043e\u0440\u043f\u0443\u0441\u0435 \u0441\u0435\u0440\u0438\u0438 Flow 160","tvc_c":"\u041a\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0432 \u043f\u043b\u0430\u0441\u0442\u0438\u043a\u043e\u0432\u043e\u043c \u043a\u043e\u0440\u043f\u0443\u0441\u0435 BALLU MACHINE \u0441\u0435\u0440\u0438\u0438 FLOW","tvc_p":"5137.40"};


        ga("require", "ec", "ec.js");   
        ga("ec:addProduct", {
            "id": tvc_po.tvc_i,                   // Product details are provided in an impressionFieldObject.
            "name": tvc_po.tvc_n,
            "category":tvc_po.tvc_c,
          });
          ga("ec:setAction", "detail");
          ga("send", "event", "Enhanced-Ecommerce", "load","product_impression_pp", {"nonInteraction": 1});
        

homepage_json_ATC_link=[];

tvc_fp=[];

tvc_rcp=[];

tvc_rdp={"http:\/\/ballu.pro\/shop\/vent\/ventilyatory\/flow\/kruglyj-kanalnyj-ventilyator-v-plastikovom-korpuse-flow-100\/":{"tvc_id":"41695","tvc_i":"\u041d\u0421-0005837","tvc_n":"\u041a\u0440\u0443\u0433\u043b\u044b\u0439 \u043a\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0442\u043e\u0440 \u0432 \u043f\u043b\u0430\u0441\u0442\u0438\u043a\u043e\u0432\u043e\u043c \u043a\u043e\u0440\u043f\u0443\u0441\u0435 Flow 100","tvc_p":"2334.95","tvc_c":"\u041a\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0432 \u043f\u043b\u0430\u0441\u0442\u0438\u043a\u043e\u0432\u043e\u043c \u043a\u043e\u0440\u043f\u0443\u0441\u0435 BALLU MACHINE \u0441\u0435\u0440\u0438\u0438 FLOW","tvc_po":1},"http:\/\/ballu.pro\/shop\/vent\/ventilyatory\/flow\/kruglyj-kanalnyj-ventilyator-v-plastikovom-korpuse-flow-125\/":{"tvc_id":"41697","tvc_i":"\u041d\u0421-0005838","tvc_n":"\u041a\u0440\u0443\u0433\u043b\u044b\u0439 \u043a\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0442\u043e\u0440 \u0432 \u043f\u043b\u0430\u0441\u0442\u0438\u043a\u043e\u0432\u043e\u043c \u043a\u043e\u0440\u043f\u0443\u0441\u0435 Flow 125","tvc_p":"2627.35","tvc_c":"\u041a\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0432 \u043f\u043b\u0430\u0441\u0442\u0438\u043a\u043e\u0432\u043e\u043c \u043a\u043e\u0440\u043f\u0443\u0441\u0435 BALLU MACHINE \u0441\u0435\u0440\u0438\u0438 FLOW","tvc_po":2}};

prodpage_json_ATC_link={"\/shop\/vent\/ventilyatory\/flow\/kruglyj-kanalnyj-ventilyator-v-plastikovom-korpuse-serii-flow-160\/?add-to-cart=41695":{"ATC-link":"http:\/\/ballu.pro\/shop\/vent\/ventilyatory\/flow\/kruglyj-kanalnyj-ventilyator-v-plastikovom-korpuse-flow-100\/"},"\/shop\/vent\/ventilyatory\/flow\/kruglyj-kanalnyj-ventilyator-v-plastikovom-korpuse-serii-flow-160\/?add-to-cart=41697":{"ATC-link":"http:\/\/ballu.pro\/shop\/vent\/ventilyatory\/flow\/kruglyj-kanalnyj-ventilyator-v-plastikovom-korpuse-flow-125\/"}};

tvc_pgc=[];

catpage_json_ATC_link=[];


                  ga("require", "ec", "ec.js");
                  ga("set", "&cu", tvc_lc);
        function t_products_impre_clicks(t_json_name,t_action,t_list){
                   t_send_threshold=0;
                   t_prod_pos=0;
                  
                    t_json_length=Object.keys(t_json_name).length
                        
                    for(var t_item in t_json_name) {
            t_send_threshold++;
            t_prod_pos++;
                            
                 ga("ec:addImpression", {   
                            "id": t_json_name[t_item].tvc_i,
                            "name": t_json_name[t_item].tvc_n,
                            "category": t_json_name[t_item].tvc_c,
                            "list":t_list,
                            "price": t_json_name[t_item].tvc_p,
                            "position": t_json_name[t_item].tvc_po,
                        });
                        
        if(t_json_length > 6){
                           if((t_send_threshold%6)==0){
                            t_json_length=t_json_length-6;
                            ga("send", "event", "Enhanced-Ecommerce","load","product_impression_"+t_action , {"nonInteraction": 1}); 
                        }
                     }else{
            
                       t_json_length--;
                       if(t_json_length==0){
                        ga("send", "event", "Enhanced-Ecommerce","load", "product_impression_"+t_action, {"nonInteraction": 1}); 
                        }
        }   
                }
        }
                
        //function for comparing urls in json object
        function prod_exists_in_JSON(t_url,t_json_name,t_list,t_action){
                                    if(t_json_name.hasOwnProperty(t_url)){
                                        t_call_fired=true;
                    ga("ec:addProduct", {             
                        "id": t_json_name[t_url].tvc_i,
                                            "name": t_json_name[t_url].tvc_n,
                                            "category": t_json_name[t_url].tvc_c,
                                            "price": t_json_name[t_url].tvc_p,
                                            "position": t_json_name[t_url].tvc_po,
                    });
                    ga("ec:setAction", "click", {"list": t_list});
                    ga("send", "event", "Enhanced-Ecommerce","click", "product_click_"+t_action, {"nonInteraction": 1}); 
                                   }else{
                                   t_call_fired=false;
                }
                                return t_call_fired;
            }
                function prod_ATC_link_exists(t_url,t_ATC_json_name,t_prod_data_json,t_qty){
                    t_prod_url_key=t_ATC_json_name[t_url]["ATC-link"];
                    
                         if(t_prod_data_json.hasOwnProperty(t_prod_url_key)){
                                t_call_fired=true;
                            // Enhanced E-commerce Add to cart clicks
                              ga("ec:addProduct", {
                               "id": t_prod_data_json[t_prod_url_key].tvc_i,
                               "name": t_prod_data_json[t_prod_url_key].tvc_n,
                               "category": t_prod_data_json[t_prod_url_key].tvc_c,
                               "price": t_prod_data_json[t_prod_url_key].tvc_p,
                                "quantity" : t_qty
                              });
                              ga("ec:setAction", "add");
                              ga("send", "event", "Enhanced-Ecommerce","click", "add_to_cart_click",{"nonInteraction": 1});     
                              }else{
                                   t_call_fired=false;
        }   
                         return t_call_fired;
                
                }
                
                
                if(tvc_rdp.length !== 0){
                    t_products_impre_clicks(tvc_rdp,"rdp","Related Products");   
                }         
                //product click - image and product name
                jQuery("a:not(.product_type_variable, .product_type_grouped)").on("click",function(){
                    t_url=jQuery(this).attr("href");
                     //prod page related call for click
                     prod_exists_in_JSON(t_url,tvc_rdp,"Related Products","rdp");
                }); 
                //Prod ATC link click in related product section
                jQuery("a[href*=add-to-cart]").on("click",function(){
            t_url=jQuery(this).attr("href");
                        t_qty=$(this).parent().find("input[name=quantity]").val();
                             //default quantity 1 if quantity box is not there             
                            if(t_qty=="" || t_qty===undefined){
                                t_qty="1";
                            }
                prod_ATC_link_exists(t_url,prodpage_json_ATC_link,tvc_rdp,t_qty);
                });   
            

tvc_smd={"tvc_wcv":"2.6.7","tvc_wpv":"4.6.1","tvc_eev":"1.0.18","tvc_cnf":{"t_ee":"yes","t_df":false,"t_gUser":false,"t_UAen":"no","t_thr":"6"}};
 });
</script>
 

artemkomarov

Специалист
Местный
Честно я думал о том что бы создать плагин для Яндекс метрики коммерции, но потом обнаружилось, что изначально возможности крайне низки и учитывая то что они все слизали с гугл смысл в отдельном плагине теряется вообще. Ну а так я с вами согласен для каких то базовых показателей яндекс сойдет.
 

hell0men

Новичок
Сойдет и небольшой набор целей. В них можно стоимость указывать. Из полезного разве что шаги корзины нужны. Это наверное тоже можно обычными целями прописать. А четкий набор товаров в заказе - это для метрики лично мне не нужно.

Screenshot_1.png Screenshot_2.png
Лично я кайфую и заказчик оценил такие отчеты. Без статистики современный торговый бизнес вообще нельзя вести эффективно, я считаю, если используется несколько каналов продвижения.
Скрины правда из HistCMS. На WC пока не осилил стоимость.
 

hell0men

Новичок
Данных пока мало. Там заказчик сам рулит. Я только за SEO отвечаю.
 

hell0men

Новичок
Спасибо за решение. Скажите совсем не программистам - как, что и где это сделать?
#place_order это id кнопки, на которую повешено JS событие, которое отслеживает клик по кнопке. То есть ничего дополнительно делать не надо кроме размещения приведенного кода. Главное чтобы id кнопки отправки заказа совпадал с кодом.
 

acid_max

Новичок
здесь решение для передачи данных заказа в отчеты Электронной коммерции Яндекс.Метрики, заодно и цель можно поставить
 
Последнее редактирование:

Demiurh

Новичок
Решение автора топика работает, вот только не надо его в файл писать - там оно будет ровно до следующего обновления.
У любой темы можно свой HTML добавлять в хеадер/футер - вот в футер его и прописать.
 

mastahi

Новичок
Благодарю за элегантный вариант добавления целей. Заработало, добавил также еще и кнопку "к сравнению" вместо placeorder. Осталось присвоить номер карточки товара который добавили к сравнению или в корзину.
 
Сверху Снизу