Удаление url по префиксу
Несколько сотен старых страниц вашего сайта остались в индексе поиска Google и Яндекс. Удаление каждой отдельно через инструмент поиска — это чрезмерная работа. Удаление URL по префиксу решает проблему: вы исключаете целую группу страниц из поиска одной операцией вместо ручной обработки множества адресов. Например, раздел «/archive/» с 50 страницами удаляется по одному префиксу через файл robots.txt, директиву в Google Search Console или другие методы. Это экономит часы при удалении старых страниц сайта и исключает ошибки. В статье разберём все основные способы удаления страниц по префиксу с примерами для каждого подхода.
Удаление URL по префиксу в коде

Удаление URL по префиксу в коде и системе данных
После удаления страниц из поиска Google и Яндекс необходимо удалить эти URL также из собственной системы данных—базы данных, логов, кэша. Иначе страницы останутся в вашей системе и при переиндексации могут снова появиться в результатах поиска. Удаление URL по префиксу требуется при закрытии старых версий API (/api/v1/), удалении архивных разделов или очистке устаревших логов.
SQL методы удаления
Основной способ—SQL запрос. В MySQL используется простой синтаксис:
DELETE FROM pages WHERE url LIKE '/api/v1/%';
Это условие удалит все страницы с URL, начинающимся на /api/v1/. Перед удалением всегда проверьте количество затронутых записей:
SELECT COUNT(*) FROM pages WHERE url LIKE '/api/v1/%';
В PostgreSQL синтаксис отличается—используется регулярное выражение:
DELETE FROM pages WHERE url ~ '^/api/v1';
Варианты синтаксиса зависят от системы баз данных. Oracle, SQLite и другие СУБД имеют собственные условия для удаления по префиксу. Убедитесь, что запрос работает правильно перед полным удалением.
Защита данных
Используйте транзакции для защиты от ошибок:
BEGIN;
DELETE FROM pages WHERE url LIKE '/api/v1/%';
-- проверка результата
ROLLBACK; -- или COMMIT если OK
Процесс удаления определённых URL должен включать:
- резервную копию таблицы перед началом;
SELECTс тем же условием для проверки затронутых страниц;- запуск удаления внутри транзакции;
ROLLBACK, если результат не соответствует ожиданиям.
Убедитесь, что приложение не добавляет новые данные во время удаления.
Примеры кода
Python помощью SQLAlchemy:
from sqlalchemy import create_engine, text
engine = create_engine('mysql+pymysql://user:pass@localhost/db')
with engine.connect() as conn:
result = conn.execute(text(
"DELETE FROM pages WHERE url LIKE :prefix"
), {"prefix": "/api/v1/%"})
conn.commit()
print(f"Удалено: {result.rowcount}")
JavaScript помощью Node.js:
const mysql = require('mysql2/promise');
async function deleteByPrefix(prefix) {
const conn = await mysql.createConnection({...});
const [res] = await conn.execute(
'DELETE FROM pages WHERE url LIKE ?',
[prefix + '%']
);
console.log(`Удалено: ${res.affectedRows} страниц`);
}
Особенности при большом объеме
Если нужно удалить определенные URL (более миллиона страниц) по одному условию, разделите на части:
DELETE FROM pages WHERE url LIKE '/api/v1/%' LIMIT 10000;
Повторяйте запрос в цикле, пока данные не удалены. Так вы избежите перегрузки серверов.
Проверьте индексы—столбец url должен имеет индекс. На больших таблицах без индекса удаление займет часы. Индекс ускоряет поиск нужных страниц.
Если у других таблиц есть FOREIGN KEY на эту таблицу, либо удалите зависимые данные предварительно, либо настройте CASCADE DELETE (осторожно—может удалить нужные данные в других системах).
Логируйте все операции для аудита и восстановления при необходимости.
Критически важно: не удаляйте в production без тестирования на staging. Всегда имеет свежий backup перед критическими операциями.