Вы делаете неправильно. Во-первых, идеология Web подразумевает, что у разного контента разные адреса, а показывать людям по одному УРЛ разные вещи в зависимости от города — неверно. У каждой страницу должен быть свой, уникальный, адрес.
Теперь представьте себе пользователя. Он зашел в Qooqle, набрал «купить мопед москва» и видит: «Продам мопед, недорого, Москва», кликает по ссылке — а вы ему вместо мопеда показываете объявления из его города Замкадовска (где максимум можно купить подержанный велосипед). Это неправильно. Мы же делаем сайт для людей, а не для СЕО, верно?
По этой же причине нельзя показывать разный контент ботам и людям. Потому что человек, который попадает на сайт из поиска, рассчитывает увидеть то же самое, что он видел в поиске. За нарушение этого правила поисковики могут понижать рейтинг сайта и убирать страницы из выдачи, и это правильно.
Надо сделать отдельные папки или домены для разных городов: saint-peterburg.objava.ru/list например. Или objava.ru/saint-peterburg/list. Если юзер из одного города зашел на домен другого города — можно показать ему в шапке предложение перейти на домен его города, но не навязывать и не заставлять переходить. Может, я еду в какой-то город и хочу посмотреть объявления оттуда.
Что же касается главного домена — objava.ru — то можно показать на нем карту России или список городов (нормальными ссылками, без яваскрипта и прочей дряни), и например, ярко выделить в нем город пользователя и предложить перейти. Например, как это сделано на главной сайта avito.ru. Человек перейдет в свой город, а робот обойдет все.
А вот за показ разного контента для разных IP по одному УРЛ и за редирект, не спрашивая желания пользователя, я считаю, сайты надо банить (что иногда и происходит). Нам не нужен колхозный интернет. Давайте все делать в соответствии со стандартами, руководствами по юзабилити и лучшими практиками, а не пытаться обхитрить поисковые системы и пользователей.