Привет, Хабр! Нейросети стремительно входят в нашу жизнь, и вот уже Яндекс встроил свою «Алису» прямо в поисковую выдачу. Иногда это удобно, но часто хочется видеть классический список ссылок, а не огромный блок сгенерированного текста, который отодвигает всё остальное вниз.
Я решил вернуть себе контроль над поиском и написал простое браузерное расширение, которое убирает всё лишнее. Назвал его «Bye Bye Alice AI». В этой короткой статье я покажу, как оно устроено.
Задача
Нужно было убрать два основных элемента:

Большой блок с нейроответом (
.FuturisSearchWrapperи.serp-item__futuris-snippet).Вкладку «Алиса» в навигации.
А также добавить возможность включать и отключать эту функцию.
Как это работает?
Вся магия происходит в нескольких файлах.
1. manifest.json — паспорт расширения
Это главный файл, где мы описываем наше расширение, запрашиваем нужные права (storage для сохранения настроек) и указываем, какие скрипты и где запускать.
{
"manifest_version": 3,
"name": "Bye Bye Alice AI",
"version": "3.0",
"description": "Removes Yandex AI (Alice) elements from search results and navigation.",
"permissions": ["storage"],
"host_permissions": ["*://*.yandex.ru/*"],
"background": {
"service_worker": "background.js"
},
"content_scripts": [
{
"matches": ["*://*.yandex.ru/search/*"],
"js": ["remover.js"],
"run_at": "document_start"
}
],
"action": {
"default_popup": "popup.html",
"default_icon": "icon_inactive.png"
},
"icons": {
"128": "icon128.png"
}
}
2. remover.js — скрипт-чистильщик
Этот скрипт запускается на страницах поиска Яндекса. Его задача — найти и удалить мешающие блоки.
const SELECTORS_TO_REMOVE = [
'.FuturisSearchWrapper',
'a.HeaderNav-Tab[href*="promo=force_neuro"]',
'li.serp-item.serp-item__futuris-snippet'
];
let isEnabled = true;
/**
* Находит и удаляет целевые элементы со страницы.
*/
function removeTargetElements() {
if (!isEnabled) return;
try {
SELECTORS_TO_REMOVE.forEach(selector => {
document.querySelectorAll(selector).forEach(el => el.remove());
});
} catch (error) {}
}
/**
* Блокирует переход по промо-ссылкам.
* @param {MouseEvent} event - Событие клика.
*/
function blockPromoNavigation(event) {
if (!isEnabled) return;
const targetLink = event.target.closest('a');
if (targetLink && targetLink.href.includes('promo=force_neuro')) {
event.preventDefault();
event.stopPropagation();
}
}
const observer = new MutationObserver(removeTargetElements);
/**
* Инициализирует MutationObserver для отслеживания изменений в DOM.
*/
function initializeObserver() {
if (document.body) {
observer.observe(document.body, {
childList: true,
subtree: true,
});
removeTargetElements();
} else {
setTimeout(initializeObserver, 100);
}
}
chrome.storage.sync.get('isEnabled', (data) => {
isEnabled = data.isEnabled !== false;
if (isEnabled) {
initializeObserver();
}
});
chrome.storage.onChanged.addListener((changes, namespace) => {
if (changes.isEnabled) {
isEnabled = changes.isEnabled.newValue;
if (isEnabled) {
initializeObserver();
} else {
observer.disconnect();
}
}
});
document.addEventListener('click', blockPromoNavigation, true);
3. popup.html и popup.js — окно настроек
Чтобы пользователь мог сам решать, нужна ему «Алиса» или нет, я добавил простое всплывающее окно с переключателем. Его состояние сохраняется в chrome.storage.
4. background.js — управление иконкой
Маленькая, но важная деталь: иконка расширения меняет цвет в зависимости от того, включена блокировка или нет. Цветная — активна, серая — выключена. Это делается в фоновом скрипте, который следит за изменением настроек.
Результат
Получилось легкое и простое расширение, которое делает ровно одну вещь, но делает ее хорошо. Поиск снова стал чистым и быстрым, а если вдруг понадобится нейросеть — ее можно вернуть одним кликом.
Если вам, как и мне, не хватало такой возможности, можете забрать расширение на GitHub. Проект очень простой, так что может стать отличным примером для тех, кто хочет попробовать написать свое первое расширение.
Спасибо за внимание!
P.S. : Это моя первая статья на Хабре и буду благодарен за карму или/и приглашение
Комментарии (9)

Bardakan
06.11.2025 06:37А можете исследовать, как заменить яндекс поиск в браузере Opera? Они счас придумали, что в ru локации выкачивается браузер, где яндекс идет единственным предустановленным поиском, и это никак не изменить. Пришлось использовать некий Opera Air, где такого нет

ris58h
06.11.2025 06:37Что помешало просто правила в uBlock добавить? В статье это не раскрыто.

1MaxSpb Автор
06.11.2025 06:37Илья, спасибо за рекомендацию! Действительно, существует множество способов избавиться от Алисы, но я решил пойти своим путём и создать свой проект.
Когда я писал статью и задумывал этот проект, я хотел попробовать создать веб-расширение самостоятельно, поскольку раньше никогда не занимался этим. Кроме того, я надеялся помочь тем пользователям, которые ищут готовое решение и не разбираются в вебе, а также поделиться своим опытом с другими.

Shephard
06.11.2025 06:37под фаерфокс бы можно пожалуйста? и ещё бы в Гугле убрать тупой поисковый вывод нейросети. хотя тут проще на DuckDuckGo перебраться. Гугл настолько дерьмофицировался, что DDGo, имхо, уже лучше. По мне даже Яндекс с Алисой даёт более релевантные результаты, чем Гугл.

1MaxSpb Автор
06.11.2025 06:37В дополнение к комментарию, могу порекомендовать да гугла расширение Bye Bye, Google AI https://chromewebstore.google.com/detail/bye-bye-google-ai-turn-of/imllolhfajlbkpheaapjocclpppchggc?pli=1
morginalium
Классно конечно, но иногда Алиса помогает.
Было бы классно если бы ее можно было заменить на тотже дипсик или квен. По API (с промт-инжинирингом наверное надо. будет поработать) такое вполне возможно.