Чтобы отслеживать посетителей на сайте, которые провели на нем более 30 секунд, нужно добавить в код Яндекс Метрики следующую строчку:

setTimeout(function() {ym(00000000,"reachGoal","time_left_30");}, 30000);

после кода:

ym(00000000, "init", {
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,
webvisor:true,
ecommerce:"dataLayer"
});

где,

00000000

— id счетчика Яндекс Метрики,

time_left_30

— идентификатор цели Яндекс Метрики.

полный код получается такой:

<!-- Yandex.Metrika counter -->
<script type="text/javascript">
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");

ym(00000000, "init", {
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,
webvisor:true,
ecommerce:"dataLayer"
});
setTimeout(function() {ym(00000000,"reachGoal","time_left_30");}, 30000);
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/00000000" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->

В метрике, при этом, нужно создать цель. Назвать ее, например, «Посетитель более 30 сек». Идентификатор цели, например, «time_left_30».

Принцип работы данного кода такой. Когда посетитель (юзер, пользователь, потенциальный клиент) попадает на Ваш сайт с рекламы или другого источника. Яндекс Метрика детектирует (определяет) его как нового (в смысле с данный момент времени) пользователя и начинает записывать события его поведения на сайте (скроллинг, клики, поведение мыши, поиск по сайту, отправка форм, клики на кнопки, клики на другие элементы сайта). В момент когда посетитель присутствует на сайте 30 секунд, срабатывает код «setTimeout» — функция JavaScript, которая устанавливает таймер — после окончания которого происходит отправка события в Метрику о том, что данный пользователь с таким — то clientID находится на сайте 30 секунд. Метрика регистрирует данное событие как Цель (конверсию) — «Посетитель более 30 сек».
Далее, после того как событий собралось достаточно (например 500 или 1000), Вы можете включать в кампаниях Яндекс Директ стратегию с оптимизацией за конверсии («Посетитель более 30 сек»). Чтобы оплачивать (покупать в Директа) только потенциально заинтересованных посетителей и не покупать ботов и прочую незаинтересованную аудиторию.

PS: На момент написания заметки, в конце марта 2024 года Яндекс добавил возможность создания цели Продолжительность визита внутри метрики (посмотрите на фото выше). Поэтому использование данного кода не обязательно.