На сайте 3000 страниц, CMS своя, Индексирование / Страницы в поиске / Исключенные страницы показывает Малоценная или маловостребованная страница.
Все страницы показывает как малоценная или какое-то конкретное количество? Дайте ссылку в личку, иначе долго выяснять будем детали...
У сашеньки смешная кличка алаич. Меня зовут Дмитрий. Пожалуйста
Подумывал я, что так может получиться 😂 Благодарю, Дмитрий!🤝
У этого способа есть один существенный минус.
Многие сайты насилуют проксями со всей России, включая зарубежные, включая хостинговые ipv6 и ipv4.
Размер .htaccess может существенно разрастись.
Ссылка на инструкцию у меня была в подписи раньше. Вот ссылка: https://disk.yandex.ru/d/7m5wQQnfh5wu0A
Там смысл такой. Сначала допиливаешь метрику, чтобы она тебе ip ботов сливала, а потом отправляешь в бан те ip, которые самые спамные по прямым заходам. При этом из поиска (с рефкой) они баниться не будут. И реферальный спам, если такой остался, тоже можно банить. Там все расписано с комментариями.
Поисковики не забанятся, потому что их в метрике не видно. Но cloudflare будет проще в настройке, если спам ботами идет с огромного количества подсетей.
Александр, благодарю за комментарий и инструкцию👍🔥
В таблицу с уникальными IP-адресами в колонку "Количество визитов" добавил функцию сортировки. Брал отсюда - https://github.com/tofsjonas/sortable
Теперь, отсортировав по убыванию, сразу вижу, какой IP отметился больше всех, и делаю соответствующие выводы.
Ну все коллеги, пора плагином делать 😂 Отправляй готовый код, чтобы все могли взять за основу. 😉
// Отслеживание// Создаем функцию для записи данных посетителейfunction log_visitor_info() { $log_file = ABSPATH . 'visitor_log.txt'; // Путь к файлу лога $current_date_time = date('Y-m-d H:i:s'); // Текущая дата и время $visitor_ip = $_SERVER['REMOTE_ADDR']; // IP-адрес посетителя $current_page = $_SERVER['REQUEST_URI']; // Текущая посещенная страница // Запись в лог $log_entry = "$current_date_time - IP: $visitor_ip, Page: $current_page\n"; // Открываем файл в режиме добавления $file_handle = fopen($log_file, 'a'); if ($file_handle) { fwrite($file_handle, $log_entry); fclose($file_handle); }}// Добавляем хук, чтобы записывать данные при каждом запросеadd_action('wp', 'log_visitor_info');// Создаем страницу в меню "Инструменты"function custom_logs_page() { add_submenu_page( 'tools.php', 'Лог посещений', 'Лог посещений', 'manage_options', 'visitor-log', 'render_visitor_log_page' );}add_action('admin_menu', 'custom_logs_page');// Функция для подсчета уникальных IP и их повторенийfunction count_unique_ips($log_entries) { $ip_counts = []; foreach ($log_entries as $entry) { if (!empty($entry)) { preg_match('/(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) - IP: (.+), Page: (.+)/', $entry, $matches); if (count($matches) === 4) { $ip = $matches[2]; if (isset($ip_counts[$ip])) { $ip_counts[$ip]++; } else { $ip_counts[$ip] = 1; } } } } return $ip_counts;}// Функция для вывода таблицы лога на страницеfunction render_visitor_log_page() { // Получаем данные из файла лога $log_file = ABSPATH . 'visitor_log.txt'; $log_content = file_get_contents($log_file); // Разбиваем записи по строкам $log_entries = explode("\n", $log_content); // Выводим страницу админки echo '<div class="wrap">'; echo '<h2>Лог посещений</h2>'; // Загружаем стили WordPress для таблиц wp_enqueue_style('wp-admin'); // Принудительно корректируем стили echo '<style>'; echo '.widefat { table-layout: fixed; }'; echo '.widefat th:nth-child(1) { width: 130px; }'; echo '.widefat th:nth-child(2) { width: 120px; }'; echo '.widefat td, .widefat th { padding: 5px 10px; }'; echo '</style>'; // Выводим таблицу с данными без инлайновых стилей echo '<table class="widefat">'; echo '<thead><tr><th>Дата и время</th><th>IP-адрес</th><th>Посещенная страница</th></tr></thead>'; echo '<tbody>'; foreach ($log_entries as $entry) { if (!empty($entry)) { preg_match('/(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) - IP: (.+), Page: (.+)/', $entry, $matches); if (count($matches) === 4) { list(, $date_time, $ip, $page) = $matches; echo "<tr><td>$date_time</td><td><a href='#' class='ip-link' data-ip='$ip'>$ip</a></td><td>$page</td></tr>"; } } } echo '</tbody>'; echo '</table>'; // Выводим таблицу с уникальными IP $unique_ips = count_unique_ips($log_entries); echo '<h2>Уникальные IP-адреса</h2>'; echo '<table class="widefat">'; echo '<thead><tr><th>IP-адрес</th><th>Количество визитов</th></tr></thead>'; echo '<tbody>'; foreach ($unique_ips as $ip => $count) { echo "<tr><td><a href='#' class='ip-link' data-ip='$ip'>$ip</a></td><td>$count</td></tr>"; } echo '</tbody>'; echo '</table>'; // Добавляем кнопку очистки лога echo '<form method="post">'; echo '<p><input type="submit" name="clear_log" class="button button-primary" value="Очистить лог"></p>'; echo '</form>'; if (isset($_POST['clear_log'])) { clear_visitor_log(); echo '<div class="updated"><p>Лог посещений очищен.</p></div>'; } // Редактор .htaccess $htaccess_content = read_htaccess_file(); if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['htaccess_content'])) { $new_content = $_POST['htaccess_content']; write_to_htaccess($new_content); $htaccess_content = $new_content; // Обновляем содержимое после сохранения } echo '<h2>Редактор .htaccess</h2>'; echo '<form method="POST">'; echo '<textarea name="htaccess_content" rows="30" cols="130">' . $htaccess_content . '</textarea>'; echo '<p><input type="submit" class="button button-primary" value="Сохранить"></p>'; echo '</form>'; echo '</div>'; // Закрываем div.wrap // JavaScript для обработки клика по IP и получения информации echo '<script> document.addEventListener("DOMContentLoaded", function() { const ipLinks = document.querySelectorAll(".ip-link"); ipLinks.forEach(link => { link.addEventListener("click", function(e) { e.preventDefault(); const ip = this.getAttribute("data-ip"); // API для проверки IP fetch(`https://ipapi.co/${ip}/json/`) .then(response => response.json()) .then(data => { alert(`Информация об IP ${ip}: Страна - ${data.country_name}, Город - ${data.city}`); }) .catch(error => { alert("Не удалось получить информацию об IP"); }); }); }); }); </script>';}// Функция для очистки логаfunction clear_visitor_log() { $log_file = ABSPATH . 'visitor_log.txt'; // Открываем файл в режиме записи и обрезаем его до нулевой длины $file_handle = fopen($log_file, 'w'); if ($file_handle) { fclose($file_handle); }}// Функция для чтения файла .htaccessfunction read_htaccess_file() { $htaccess_path = ABSPATH . '.htaccess'; if (file_exists($htaccess_path)) { return file_get_contents($htaccess_path); } return false;}// Функция для записи в файл .htaccessfunction write_to_htaccess($content) { $htaccess_path = ABSPATH . '.htaccess'; if (file_exists($htaccess_path) && is_writable($htaccess_path)) { return file_put_contents($htaccess_path, $content); } return false;}
Аккуратнее с .htaccess, не "наломайте дров" 😁
// Загружаем стили WordPress для таблиц wp_enqueue_style('wp-admin');
// Выводим таблицу с данными без инлайновых стилей echo '<table class="widefat">'; echo '<thead><tr><th>Дата и время</th><th>IP-адрес</th><th>Посещенная страница</th></tr></thead>';
Добавил блок:
// Принудительно корректируем стили echo '<style>'; echo '.widefat { table-layout: fixed; }'; echo '.widefat th:nth-child(1) { width: 130px; }'; echo '.widefat th:nth-child(2) { width: 120px; }'; echo '.widefat td, .widefat th { padding: 5px 10px; }'; echo '</style>';
Теперь, когда адрес длинный, то таблицу не ломает. Строчки чуть уже. Для восприятия лучше.👌
С момента добавления сайта в яндекс вебмастер количество загруженных страниц постоянно прыгает от минимума до максимума, то есть сначала растёт, затем уменьшается, затем опять растёт, опять уменьшается и так по кругу. Сайт для людей, sitemap есть, хостинг проверенный. При всём при этом количество страниц в поиске - 1 штука и больше ни разу не было. Прошло уже несколько месяцев, а ситуация не меняется.
Прошу высказать мнения, в чём может быть причина такого поведения яндекса.
Доброго дня! Чтобы обсудить возможные причины, предоставьте информацию:1. Сколько документов на сайте всего?2. CMS сайта какой?3. Что показывает в Webmaster в: Индексирование / Страницы в поиске / Исключенные страницы ?4. Используете какое то решение для связки сайта к консолью?5. Можно ссылку в лсp.s.Недавно сайт запускал новый сайт, домен нулевой и 18к документов оказалось в индексе за 29 дней. Трафик с Яндекса пошел в первые же сутки. Ни ссылок, ни ПФ...
// Отслеживание// Создаем функцию для записи данных посетителейfunction log_visitor_info() { $log_file = ABSPATH . 'visitor_log.txt'; // Путь к файлу лога $current_date_time = date('Y-m-d H:i:s'); // Текущая дата и время $visitor_ip = $_SERVER['REMOTE_ADDR']; // IP-адрес посетителя $current_page = $_SERVER['REQUEST_URI']; // Текущая посещенная страница // Запись в лог $log_entry = "$current_date_time - IP: $visitor_ip, Page: $current_page\n"; // Открываем файл в режиме добавления $file_handle = fopen($log_file, 'a'); if ($file_handle) { fwrite($file_handle, $log_entry); fclose($file_handle); }}// Добавляем хук, чтобы записывать данные при каждом запросеadd_action('wp', 'log_visitor_info');// Создаем страницу в меню "Инструменты"function custom_logs_page() { add_submenu_page( 'tools.php', 'Лог посещений', 'Лог посещений', 'manage_options', 'visitor-log', 'render_visitor_log_page' );}add_action('admin_menu', 'custom_logs_page');// Функция для подсчета уникальных IP и их повторенийfunction count_unique_ips($log_entries) { $ip_counts = []; foreach ($log_entries as $entry) { if (!empty($entry)) { preg_match('/(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) - IP: (.+), Page: (.+)/', $entry, $matches); if (count($matches) === 4) { $ip = $matches[2]; if (isset($ip_counts[$ip])) { $ip_counts[$ip]++; } else { $ip_counts[$ip] = 1; } } } } return $ip_counts;}// Функция для вывода таблицы лога на страницеfunction render_visitor_log_page() { // Получаем данные из файла лога $log_file = ABSPATH . 'visitor_log.txt'; $log_content = file_get_contents($log_file); // Разбиваем записи по строкам $log_entries = explode("\n", $log_content); // Выводим страницу админки echo '<div class="wrap">'; echo '<h2>Лог посещений</h2>'; // Загружаем стили WordPress для таблиц wp_enqueue_style('wp-admin'); // Выводим таблицу с данными echo '<table class="widefat">'; echo '<thead><tr><th>Дата и время</th><th>IP-адрес</th><th>Посещенная страница</th></tr></thead>'; echo '<tbody>'; foreach ($log_entries as $entry) { if (!empty($entry)) { preg_match('/(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) - IP: (.+), Page: (.+)/', $entry, $matches); if (count($matches) === 4) { list(, $date_time, $ip, $page) = $matches; echo "<tr><td>$date_time</td><td><a href='#' class='ip-link' data-ip='$ip'>$ip</a></td><td>$page</td></tr>"; } } } echo '</tbody>'; echo '</table>'; // Выводим таблицу с уникальными IP $unique_ips = count_unique_ips($log_entries); echo '<h3>Уникальные IP-адреса</h3>'; echo '<table class="widefat">'; echo '<thead><tr><th>IP-адрес</th><th>Количество визитов</th></tr></thead>'; echo '<tbody>'; foreach ($unique_ips as $ip => $count) { echo "<tr><td><a href='#' class='ip-link' data-ip='$ip'>$ip</a></td><td>$count</td></tr>"; } echo '</tbody>'; echo '</table>'; // Добавляем кнопку очистки лога echo '<form method="post">'; echo '<p><input type="submit" name="clear_log" class="button button-primary" value="Очистить лог"></p>'; echo '</form>'; if (isset($_POST['clear_log'])) { clear_visitor_log(); echo '<div class="updated"><p>Лог посещений очищен.</p></div>'; } echo '</div>'; // Закрываем div.wrap // JavaScript для обработки клика по IP и получения информации echo '<script> document.addEventListener("DOMContentLoaded", function() { const ipLinks = document.querySelectorAll(".ip-link"); ipLinks.forEach(link => { link.addEventListener("click", function(e) { e.preventDefault(); const ip = this.getAttribute("data-ip"); // API для проверки IP fetch(`https://ipapi.co/${ip}/json/`) .then(response => response.json()) .then(data => { alert(`Информация об IP ${ip}: Страна - ${data.country_name}, Город - ${data.city}`); }) .catch(error => { alert("Не удалось получить информацию об IP"); }); }); }); }); </script>';}// Функция для очистки логаfunction clear_visitor_log() { $log_file = ABSPATH . 'visitor_log.txt'; // Открываем файл в режиме записи и обрезаем его до нулевой длины $file_handle = fopen($log_file, 'w'); if ($file_handle) { fclose($file_handle); }}
Интересное решение. А как это поможет если в ботосетке много айпишников и каждый заход - с нового?
Доброго дня. Вижу по Вашему сайту, что Вы коммерциализируете свои навыки защиты сайтов от ботов. Так же благодарю, за "наводку" в теме. Объективно, не все случаи требуют сверх-решения. Есть локальные(региональные) продукты, которым боты докучают не так сильно... и в таком случае, как и в моем, такое решение помогает решить вопрос. Если проект крупный, то и ресурсы, в теории, позволят решать вопросы на другом уровне. Для всех остальных, полагаю, будет достаточно и "коленочного" решения 😉