На Opencart делал на базе мультиязычности, каждый город отдельный язык. Затем делался шаблон для вывода, а модератор сайта лишь заполнял синонимы, и под каждый город выходил уникальный контент, имеющий одинаковый смысл. Города были на поддоменах. Таким образом получился некий генератор контента. Но на данном проекте не нужна была мультиязычность. Такая реализация очень быстра по захвату вывода в поисковиках на всех нужных локациях.