The 24-year-old found himself frozen out of Mark Hughes' team towards the end of last season and was left out of the club's pre-season tour of China.
His lack of game-time also saw him surprisingly dropped by Morocco for the World Cup, having previously been expected to play a key part.
An agreement between the Saints and Celta was announced by the Premier League club on Friday, with the side from LaLiga later confirming the deal.
Boufal joined Southampton from Lille for a then club-record fee of around £16million in 2016.
Since then he has made 59 appearances for Southampton, scoring four goals, including the 2017-18 Premier League goal of the season against West Brom.
The arrival of Mohamed Elyounoussi from Basel earlier this summer will serve to offset the loss of Boufal.