Родился в Ташкенте (Узбекистан). Футболом начал заниматься в «Пахтакоре», после чего отправился в московскую «Академику». В 2003 году перешел в московский ЦСКА, в составе которого стал обладателем Кубка УЕФА и Кубка России. Спустя три года Денисов перешел в нижегородский «Спартак» (38 матчей) на правах аренды, а уже в следующем сезоне права на футболиста выкупил украинский «Днепр» (161 матч). В 2013 году Виталий перебрался в московский «Локомотив» (141 матч), с которым стал чемпионом России и обладателем Кубка России. Затем выступал за «Крылья Советов» (18 матчей). Прошлый сезон начал в «Рубине» (9 матчей), а в январе 2020 года перешел в «Ротор» (2 матча), с которым завоевал путевку в Премьер-Лигу. После окончания сезона покинул Волгоград.
С 2006 по 2018 года выступал за сборную Узбекистана. Сыграл 72 матча и забил 1 гол в ворота сборной Сингапура.
20 сентября 2020 года подписал контракт с «Томью» до конца сезона 2020/2021.
Олимп-Первенство России по футболу среди команд клубов ФНЛ 2020–2021 годов
26-й тур
Нефтехимик
Нижнекамск
2
:0
Томь
Томск
Нижнекамск, стадион "Нефтехимик"