He made his first-team debut with Leixões in May 2004 and then spent the next four years on loan with lower league clubs Padroense, Ribeirão, and Estoril.
He came through the junior ranks at Leixões to make his first-team debut in the Segunda Liga (second tier) on 9 May 2004, coming on as a 77th-minute substitute for Bruno China in a 1–1 draw with Varzim at the Estádio do Mar.
Tavares then joined Ribeirão on loan, making 20 appearances in the 2006–07 campaign as the club finished fourth in Segunda Divisão – Série A (third tier).
He then scored five goals (including four penalties) in 18 games in 2013–14 as Vitória posted a seventh-place finish, though he missed four months of the season with a fractured toe.
[8] Tavares signed a two-year contract with EFL League One club Port Vale in July 2016, in a move that reunited him with former Vitória manager Bruno Ribeiro.
[11] However, Ribeiro resigned on Boxing day, and Tavares found his first-team chances very limited under caretaker manager Michael Brown so instead used his time to help coach the under-9 and under-10 teams.
[14] He played 16 games for the "Rapazes de Azul-Grená" over the 2017–18 season, and was sent off on his final appearance for the club on 11 February, in a 1–0 defeat to Vitória S.C. B at the Estádio D. Afonso Henriques.