ivanko44

Рейтинг
3
Регистрация
06.11.2024

Кстати, сегодня яндекс обновил свой кабинет вебмастера слегка, но хотелось бы подкинуть ссылочку для размышлений тем, кому есть чем мыслить и сопоставить это с информацией в теме . О признаках некачественного сайта. 

https://yandex.ru/support/webmaster/ru/yandex-indexing/webmaster-advice?lang=ru

Nil2024 #:

а как можно обновлять блок на странице, если пользователь с неё ушёл = закрыл страницу? Или это про что то другое?

А, понял) Типа если не свернута и не на другой вкладке пользователь. ОК

Надо было проще написать, но  лучше так..  мало кто учитывает этот момент, но  суть того, что я говорил раньше в том,  что  если пользователь уже ушёл со страницы (закрыл вкладку, перешёл на другой сайт и т.д.) — обычный JavaScript на этой странице уже ничего обновить не сможет, потому что код просто перестал выполняться. Браузер выгрузил страницу из памяти (или она в состоянии «заморожена» в background tab), и твой setInterval, WebSocket, fetch и т.п. уже не работают.

Но есть несколько способов, как всё-таки «обновлять блок», даже когда пользователь физически не на странице:

Server-Sent Events (SSE) или WebSocket + Page Visibility APIЕсли пользователь просто свернул вкладку или переключился на другую — страница ещё жива!!   По умолчанию в background-вкладках таймеры сильно троттлятся (setInterval 1 раз в секунду максимум), но WebSocket и SSE продолжают работать почти нормально!

Пример... 

// При уходе со страницы — отключаем тяжёлые обновления
document.addEventListener('visibilitychange', () => {
  if (document.hidden) {
    console.log('Пользователь ушёл — можно отключить polling');
    clearInterval(pollingInterval);
  } else {
    console.log('Вернулся — включаем обратно');
    startPolling();
  }
});
А для реального времени лучше использовать WebSocket — он будет получать сообщения даже в background-вкладке, но с небольшими задержками....

TonyBlackberry #:

если ставить порог CPMV, то доход прилично снижается, а вместо рекламы часто показывается пустое место

Вот тут надо внимательно изучить тепловую карту сайта и воткнуть блоки туда, где она самая горячая.  Лучше меньше, но дороже, чем больше и дешевле, чтобы яндекс заполнил все слоты самой трешовой рекламой.  Тут надо балансировать и баланс уже ловится после реальной статистики и анализа конкретного ресурса.   Но для всего этого требуется изменить статистику в метрике чтобы поведение пользователей оценивалось дороже, то есть самый первый пост темы - гасите ботов! 
TonyBlackberry #:
у меня ощущение, что яндекс принимает впнщиков за ботов. поэтому выпиливать их приходится. но выпиливать надо зарубежные хостинг-компании, а не страны целиком.

Нет, тут дело в другом...  Многие пользователи (особенно с VPN, Firefox с защитой, Brave, uBlock и т.д.) приходят без referrer вообще  они рекламу не увидят.  Google с 2020 года часто отправляет referrer без параметров ([хттп://google.com/), но сам домен остаётся.Yandex тоже может скрывать параметры, но домен виден.

В общем есть момент, можно показывать блоки только зашедшим referrer но если хочешь ловить ещё и прямой трафик, например закладки — добавь условие empty($_SERVER['HTTP_REFERER']).

Короче, дело к ночи...

Самый простой вариант..  php

<?php
function isFromSearchEngine() {
    if (empty($_SERVER['HTTP_REFERER'])) {
        return false;
    }

    $referer = strtolower($_SERVER['HTTP_REFERER']);
    $url = parse_url($referer);

    if (!$url || empty($url['host'])) {
        return false;
    }

    $host = $url['host'];

    // Список доменов поисковых систем (можно расширять)
    $searchEngines = [
        'google.', 'yandex.', 'bing.com', 'yahoo.com', 'duckduckgo.com',
        'rambler.ru', 'mail.ru', 'go.mail.ru', 'nigma.ru', 'gogo.ru',
        'baidu.com', 'seznam.cz', 'naver.com', 'qwant.com'
    ];

    foreach ($searchEngines as $se) {
        if (strpos($host, $se) !== false) {
            return true;
        }
    }

    return false;
}

// Использование
if (isFromSearchEngine()) {
    echo '<div class="ads-block">Твоя реклама здесь</div>';
}
?>

Или скриптом

<script>
function isFromSearchEngine() {
    const referrer = document.referrer.toLowerCase();
    if (!referrer) return false;

    const searchEngines = [
        'google.', 'yandex.', 'bing.com', 'yahoo.com', 'duckduckgo.com',
        'mail.ru/search', 'go.mail.ru', 'rambler.ru'
    ];

    return searchEngines.some(se => referrer.includes(se));
}

if (isFromSearchEngine()) {
    document.write('<div class="ads-block">Реклама для пришедших из поиска</div>');
    // или просто показываешь уже существующий блок
    // document.querySelector('.ads-from-search').style.display = 'block';
}
</script>

Можно еще через .htaccess + переменная окружения (Apache)

RewriteEngine On

# Проверяем, что реферер содержит домены поисковиков
RewriteCond %{HTTP_REFERER} (google\.|yandex\.|bing\.com|duckduckgo\.com|yahoo\.com) [NC]
RewriteRule ^(.*)$ - [E=from_search:1]

# Если переменная установлена — можно использовать в PHP через $_SERVER['REDIRECT_from_search']

Тогда через PHP так.. 

<?php
if (!empty($_SERVER['REDIRECT_from_search'])) {
    echo '<div class="ads-block">Реклама</div>';
}
?>

Или универсальный вариант.. 

<?php
$ref = $_SERVER['HTTP_REFERER'] ?? '';
$fromSearch = preg_match('#(google|yandex|bing|duckduckgo|yahoo|rambler|mail\.ru)#i', $ref);

if ($fromSearch) {
    echo '<div class="ads-block">Только для трафика из поиска!</div>';
}
?>

Напоминаю, для прямого трафа типа закладок добавь условие empty($_SERVER['HTTP_REFERER']).

Комбо 

<?php
$ref = $_SERVER['HTTP_REFERER'] ?? '';
$isDirect = empty($ref);
$isFromSearch = !$isDirect && preg_match('#(google|yandex|bing|duckduckgo|yahoo|rambler|mail\.ru)#i', $ref);

if ($isFromSearch) {
    echo '<div class="ads-from-search">Реклама только для поискового трафика</div>';
}
?>

Вуаля! 😀  Ащо можно показать блокирующим рекламу какую-нибудь рекламу или окно с предупреждаловкой...  или с просьбой отрубить блокировщик со страшным предупреждением что их трафик полностью. перехватывается сомнительным плагином (реально помогает!).  Я обычно им показываю рекламу на внутренние страницы сайта и издевательски вставляю картинку как в рекламе 🤣 Когнитивный диссонанс обеспечен!  Бобра и удачи! В смысле, не бобра удачи, чтобы все деревья упали..  🤣

А ...еще... Если кто-то думает, что я засланный яковым, то скажу кратко.  Если завтра гуглеца отморозят - я первым уйду к нему, на нем я в два раза больше зарабатывал.  😎
ManHuntt #:

Конечно. У меня на сайтах при прежнем трафике доход год к году упал в 2 раза. 2024-й был еще норм более-менее.

Основные причины и так всем известны, это не китайская математика:

1. Тотальная монополия Яндекса на рекламном рынке. Не нравится - типа уходите. Куда вы денетесь с подводной лодки?

2. Постоянно ухудшающаяся ситуация в реальной экономике.


А нам тут про каких-то ботов втирают дичь 😀

Тотальное недопонимание сути работы РСЯ.  Это классическая биржа, все работает исключительно по ее алгоритмам.  Если тут есть кто-то, кто работает с биржами- сразу понял, что место на вашем сайте это товар, который нужно продать максимально дорого и для этого надо пошевелить мозгом,  а не тупо воткнуть кусок кода, поставить автоматом "максимальный доход" и жать как та бабка у разбитого корыта.   Кстати, если вы поставите "максимальный доход" то уже через короткое время цена вашего места под рекламу упадет так же автоматически.    А теперь вопрос на засыпку - почему?    Правильный ответ приведет к правильному решению, всем бобра, счастья и доходов в новом году!  ❤️
adam55 #:
Накаркал как говориться я, что поставил запрет всем странам кроме РФ и все норм. Стата того же майла показывает вообще какой-то Сингапур. И полно "пользователей". Отказы естественно пошли вверх. Как с ним (с ними) бороться и что делать вообще не знаю..
А зачем ставить запрет всем странам?  Вы пилите VPNщиков.  Запрет надо ставить ботам и плохим сетям. 
Weblady #:

Подскажите, пожалуйста, формат Floor Ad стоит ли сейчас протестировать? Когда-то Full screen приносил большой доход, но года два назад доход резко упал по нему, уже давно отказались.

Как сейчас дела обстоят с Floor Ad?

Для мобильного  трафика актуально.  
Не чаще 1 раза в 30 секунд (лучше 35–45 сек)
Не более 20–30 обновлений за сессию
Обязательно проверяйте document.visibilityState === 'visible'
Используйте onlyIfInViewport: true где возможно
Не обновляйте блок, если пользователь уже ушёл со страницы
Для мобильных устройств интервал лучше делать 45–60 сек

Продолжим тему.  Раз пошла такая пьянка, раскрою некоторые безопасные фокусы, использовать вам их или нет  - дело ваше личное.   Наверное уже некоторые убедились, что уничтожение ботов на своем сайте работает.   Тут правда надо учитывать еще и качество сайта, ибо ГС и генеренные с ИИ все равно мало актуальны для яндекса и тем более для рекламодателей.  

 

<script>
// ID вашего RTB-блока (из кода Яндекса)
const BLOCK_ID = 'R-A-1234567-1'; // ← замените на свой

let refreshCount = 0;
const MAX_REFRESHES = 30; // сколько раз обновить за сессию (защита от бесконечного цикла)
const REFRESH_INTERVAL = 40000; // 40 секунд — самый безопасный интервал.

function refreshYandexRTB() {
    if (refreshCount >= MAX_REFRESHES) return;
    
    if (typeof Ya !== 'undefined' && Ya.adfoxCode) {
        Ya.adfoxCode.reload(BLOCK_ID, { onlyIfInViewport: true });
        refreshCount++;
    }
}

// Запускаем через 40 секунд после загрузки страницы
setTimeout(() => {
    refreshYandexRTB();
    
    // Дальше каждые 40 секунд, только если пользователь ещё на странице
    setInterval(() => {
        if (document.visibilityState === 'visible') {
            refreshYandexRTB();
        }
    }, REFRESH_INTERVAL);
}, REFRESH_INTERVAL);
</script>

Более грамотный вариант, ротация только при видимости... 

<script>
const BLOCK_ID = 'R-A-1234567-1';
let refreshed = false;

const observer = new IntersectionObserver((entries) => {
    entries.forEach(entry => {
        if (entry.isIntersecting && !refreshed && entry.intersectionRatio > 0.5) {
            setTimeout(() => {
                if (typeof Ya !== 'undefined' && Ya.adfoxCode) {
                    Ya.adfoxCode.reload(BLOCK_ID);
                    refreshed = true;
                }
            }, 35000); // обновляем через 35 сек после появления в зоне видимости
        }
    });
}, { threshold: 0.5 });

// Находим контейнер блока по data-id или классу
const blockContainer = document.querySelector(`div[data-id="${BLOCK_ID}"]`) ||
                       document.querySelector('.yandex-rtb-block');

if (blockContainer) observer.observe(blockContainer);
</script>

Ротация при скролле вниз если статья длинная... 

<script>
const BLOCK_ID = 'R-A-1234567-2'; // блок в середине или внизу статьи
let lastScrollY = 0;
let refreshes = 0;

window.addEventListener('scroll', () => {
    if (refreshes >= 15) return;
    
    const scrolled = window.scrollY + window.innerHeight;
    const pageHeight = document.body.scrollHeight;
    
    // Если проскроллили больше 70% страницы — обновляем
    if (scrolled > pageHeight * 0.7 && window.scrollY > lastScrollY) {
        lastScrollY = window.scrollY;
        
        setTimeout(() => {
            if (typeof Ya !== 'undefined' && Ya.adfoxCode) {
                Ya.adfoxCode.reload(BLOCK_ID);
                refreshes++;
            }
        }, 30000);
    }
});
</script>

Автоматическая ротация липких блоков, например боковая колонка... 

<script>
const BLOCK_ID = 'R-A-1234567-3';
let timeOnPage = 0;
const interval = setInterval(() => {
    timeOnPage += 30;
    
    if (timeOnPage >= 30 && timeOnPage % 40 === 0) { // каждые 40 сек
        if (document.visibilityState === 'visible') {
            Ya.adfoxCode.reload(BLOCK_ID, { onlyIfInViewport: false });
        }
    }
    
    if (timeOnPage > 1200) clearInterval(interval); // останавливаем через 20 минут
}, 30000);
</script>
Всего: 64