Сразу обозначу, что "ключевые слова" и поисковые запросы - это не одно и то же. Ключевые слова - это та лексика, с помощью которой наиболее точно описывается контент страницы и которые могут содержаться в поисковом запросе.
Поисковые запросы по-прежнему проще всего кластеризовать по топу поисковой выдачи с расчётом на то, что результаты такой кластеризации потом придётся доводить до ума вручную (или с помощью вспомогательного инструментария). Смысл простой: по списку интересующих запросов снимается статистика из поисковой выдачи, в результатах ищутся пересечения по сайтам. Традиционно для этого я использовал KeyCollector, он годен для этой задачи и сейчас (если речь идёт о Яндекс).
Второй подход - взять пару эталонных сайтов (максимально похожих на свой, целевой) и выгрузить структурирование из инструментов наподобие keys.so. Это даже быстрее, а результаты проще контролировать.
Есть и более сложные и затратные по ресурсам способы:
а) Кластеризация на базе поисковых интентов, исходя из контента. В этом случае отталкиваемся не от лексики (то есть ключевых слов) и поисковой статистики, а от семантики и поисковых намерений целевой аудитории. Условно, исходим из базового намерения ("прямые поставки асфальтного оборудования из Китая"), пробиваем разветвления запросов (подтемы, напрямую связанные с этим намерением), и уже на этой базе прорабатываем и структуру сайта (постранично и комплексно), и ключевые слова, которые должны присутствовать в каждой группе.
б) Кластеризация на векторах. В этом случае каждый запрос прогоняется через достаточно сложный классификатор, использующий LLM, кластеризуется чем-то наподобие HDBSCAN, и выявляются максимально близкие запросы и те, что явно вылетают за пределы заданных смыслов. Этот способ не учитывает поисковую статистику и годен только как вспомогательный, для углубленных проработок - сама по себе семантика никак не связана с пользователями, и основывается только на статистике слов. С другой стороны, поисковая статистика тоже очень однобока, а при нынешних алгоритмах сильно "шумит". Отмечу, что для проработки тех подзапросов, что никогда не попадают в статистику того же "Вордстат", но должны присутствовать в кластере, замены этому способу нет.
В общем, первый традиционный способ я бы и предложил как базовый: берем перечень запросов, снимаем по ним статистику с использованием XML, получаем группировки запросов. Доводим до ума.
Дальше - по результатам, по задачам.