With several clubs across Europe interested in the former Internacional star, Shakhtar activated the release clause in his contract.
Metalist had previously turned down a bid of £9.3m.
"On January 10, the presidents of Shakhtar and Metalist negotiated the transfer of Taison from the Kharkiv club to the Donetsk team," a statement on the club's official site read.
"Shakhtar paid $20m, and we got a player who really wanted to join our team. The Brazilian player's five-year contract started on January 11."
The Ukrainian Premier League is currently in its extended winter break, with the season set to resume on March 1 once the freezing weather has eased.
Shakhtar are 13 points clear at the top after 18 matches.