Только что тоже этим озадачился. Попробовал так, похоже, работает:
1. в теле HTML остаётся только
<noscript><div><img src="//mc.yandex.ru/watch/XXXXXX?ut=noindex" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
2. в конфиге require в paths дописываем путь для скрипта метрики (название "yametrika" я преложил, вы можете назвать сей "модуль" как угодно):
"yametrika": "//mc.yandex.ru/metrika/watch"
3. в первом загружаемом модуле нужно указать этот "yametrika" в зависимостях, но не обязательно назначать ему ответную переменную:
define([ 'backbone','jquery', ... ,"yametrika"], function(...){}
4. в функции, которая там вызывается вставить
инициализацию объекта Метрики:
try {
window.yaCounterXXXXXX = new Ya.Metrika(
{
id:XXXXXX
, trackHash:true
, ut:"noindex"
}
);
} catch(e) { }
Всё, дальше можно, например, обозначать достижения целей:
yaCounterXXXXXX.reachGoal("ME_IS_RICH_NOW");
Upd. у некоторых посетителей включены блокировщики скриптов, отрубающие загрузку Яндекс.Метрики. Не поленитесь предусмотреть случай ошибки загрузки этого скрипта.
Например, заменой его, в случае неудачи «пустышкой», подгружаемой с вашего сервера, указав её в paths:
"yametrika": [ "//mc.yandex.ru/metrika/watch", "lib/yamertika_dummy"]
где описаны методы метрики:
...
return {
addFileExtension:function(){}
, clickmap: function(){}
, enableAll: function(){}
, extLink: function(){}
, file: function(){}
, hit: function(){}
, replacePhones:function(){}
, notBounce: function(){}
, reachGoal: function(){}
, trackLinks: function(){}
, params: function(){}
};
или просто обработав ошибку в конфиге require:
requirejs.onError = function(err){
if( err.requireModules.length == 1 && err.requireModules[0] == "yametrika") { ... } else throw err;
}