Flag - удалить овер 16 млн лайков или удалить пути роутов лайков из индекса

Главные вкладки

Аватар пользователя OldWarrior OldWarrior 10 июля в 11:32

На проекте более 16 млн лайков по статьям, поставленным через Flag.

Сеошники обнаружили, что ссылки на установку лайка (вида https://****/flag/flag/like_content/114962?destination&token=*****) попали в индекс и редиректят на статью. По их выводам это вызывает определённые санкции со стороны поисковиков. Несмотря на то, что сам вывод ссылок (и, соответственно, установку новых лайков) на текущий момент отключили - они остались в индексе как "живые" (поскольку реагируют на запрос и осуществляют редирект).

В идеале необходимо возвращать по этим ссылкам 404. Это со слов сеошников.

Было принято решение удалить все лайки.

1. Удалить накопленные флаги через управление конкретным флагом не удаётся - при клике на "Удалить" система надолго задумывается (видимо, из-за большого объёма удаления) и в итоге выдаёт 504. После чего беглый анализ показывает, что ничего удалено не было. Сервер на VPS, если что.

2. Модуль Flag (и зависимый от него Flag Count) удалить не позволяет (что давало некоторую надежду, что флаги при этом удалятся автоматом) - требует сначала предварительно удалить все сущности flagging (которых, как я писал выше, более 16 млн).

3. Помимо удаления отдельных флагов - есть штатный общий батч для удаления сущностей flagging для всех типов флагов. Если воспользоваться батчем, то процесс всё же движется, но крайне медленно - удаляется порядка 1000 флагов за 5 мин. Грубый расчёт показывает, что полное удаление 16 млн. займёт около 1300 часов. Что неприемлемо.

Самое занятное, что на проекте в robots.txt обнаружилась запись вида (для любых User-agent):

# webmaster.yandex.ru
Disallow: /flag/

Но мне неизвестно, когда добавили эту запись. Возможно, после того, как бот уже нахватался ссылок.

Вопрос: как быстро удалить флаги или принудительно установить 404 для любых путей /flag/* (учитывая, что модуль останется включенным - т.е. роуты по путям останутся закреплены за Flag). Вариант "вычистить какие-то таблицы" является самым плохим по ряду причин. Да и удобных инструментов для работы с MySQL (а-ля phpMyAdmin) на проектена текущий момент нет, как и root-доступа. Для этого нужно тормошить сисадмина и просить его устанавливать PMA.

Лучший ответ

Аватар пользователя OldWarrior OldWarrior 10 июля в 13:42

РЕШЕНИЕ:

В общем, в итоге быстрее всего оказалось решить вопрос через сисадмина, поскольку доступа к конфу nginx у меня нет. Растормошил его и дал маску пути /flag/flag/like_content/*. Он уже добавил нужные правила для 404 в конф.

Комментарии

Аватар пользователя Andruxa Andruxa 10 июля в 12:44

OldWarrior wrote: Модуль Flag (и зависимый от него Flag Count)
...
процесс всё же движется, но крайне медленно - удаляется порядка 1000 флагов за 5 мин

похоже, что при удалении флага, Flag Count пересчитывает статистику заново, по всем 16М записям.
Так ведь и недолго базу изнасиловать до смерти.

OldWarrior wrote: принудительно установить 404 для любых путей /flag/*

написать свой RouteSubscriber где заменить контроллеры модуля Flag на свои, возвращающие 404, ну или хакнуть пропатчить контроллеры Flag'a - думаю, больному от этого хуже уже не станет

OldWarrior wrote: удобных инструментов для работы с MySQL (а-ля phpMyAdmin)

там ключевое слово - php, со всеми вытекающими таймаутами, нехватками памяти и прочими прелестями интерпретатора
можно поставить локально MySQL Workbench - он умеет пробрасывать ssh-тоннель до хоста

Аватар пользователя OldWarrior OldWarrior 10 июля в 12:54

Andruxa wrote: написать свой RouteSubscriber где заменить контроллеры модуля Flag на свои, возвращающие 404, ну или хакнуть пропатчить контроллеры Flag'a - думаю, больному от этого хуже уже не станет

Тоже думал над этим вариантом (сабскрайбер либо прямой хак). Однако мысль отклонилась в сторону .htaccess (как более быстрому выходу) и с удивлением обнаружил, что он не реагирует на добавление новых правил. Совсем. Даже заведомо ошибочные добавляю с целью именно убедиться в его работоспособности - ничего. Ощущение, что запросы как-то там закешированы злым прокси (а он есть снаружи и реально злой). В общем, видимо, по-любому нужно тормошить и ждать админа.

Аватар пользователя OldWarrior OldWarrior 10 июля в 13:23

Andruxa wrote: ого, там Апач?

Да вот только что растормошил админа, говорит, что там nginx. Т.е. мои манипуляции в расчёте на апач были бесполезны. ) Что-то вообще не подумал об nginx-альтернативе.

Кстати, вопрос: а почему "ого"? Апач на нагруженных проектах - редкость?

Аватар пользователя OldWarrior OldWarrior 10 июля в 13:42

РЕШЕНИЕ:

В общем, в итоге быстрее всего оказалось решить вопрос через сисадмина, поскольку доступа к конфу nginx у меня нет. Растормошил его и дал маску пути /flag/flag/like_content/*. Он уже добавил нужные правила для 404 в конф.