(From L) Inter Milan's Lautaro Martinez, Achraf Hakimi and Alessandro Bastoni celebrate after lifting the Serie A title.
Juventus qualified for the Champions League on the final day of the season on Sunday with a 4-1 win at Bologna and were joined by AC Milan who beat Atalanta 2-0.
Napoli had to settle for a Europa League spot, finishing fifth, one point behind Juventus, after a 1-1 draw at home against Hellas Verona.
A pair of Franck Kessie penalities at the end of either half ensured AC Milan finished the season second -- 12 points behind city rivals Inter Milan -- and return to the Champions League for the first time since the 2013-2014 season.
"We deserved the Champions League as well as second place," said Milan coach Stefano Pioli whose side had missed the chance to seal their berth last weekend against Cagliari.
"We went through the whole championship at the top, unfortunately we had thrown away the match point last Sunday.
"I'm really excited, happy, I have to thank the club because they made us work in a spectacular way."
Atalanta had already ensured a third consecutive season of Champions League football but missed out on a first second-place Serie A finish days after losing out in the Coppa Italia final to Juventus.
Cristiano Ronaldo was left on the bench by Juventus coach Andrea Pirlo who opted for an attacking line-up of Paulo Dybala and Alvaro Morata flanked by Federico Chiesa and Dejan Kulusevski.
"It was a shared choice, Ronaldo was tired after the fatigue on Wednesday," said Pirlo.
"He made himself available to the team but I chose to have another player named Morata play, who is not the latest arrival. I have a quality team, with many choices available."
A Morata brace along with goals from Chiesa and Adrien Rabiot prevented Juventus missing out on the elite European competition for the first time since 2012.
In Naples, Amir Rrahmani scored for Napoli after an hour against his former club, which would have been enough to secure a berth at the top table but Davide Faraoni pulled one back for the visitors nine minutes.
Gennaro Gattuso's side were denied a return to elite European action after also missing out last season.
In a tense game in Bergamo, Milan held on despite playing without injured star striker Zlatan Ibrahimovic.
Kessie proved solid in front of goal taking the first penalty three minutes before the break and the second deep into injury time.
Lazio join Napoli in the Europa League despite a 2-0 loss at Sassuolo with Roma finishing seventh after coming from two goals down to hold Spezia 2-2.
In Bologna, Italy forward Chiesa, who scored the Coppa Italia winner midweek, finishing off a Kulusevski cross into the box from close range after six minutes for his 15th goal in all competitions this season.
Dybala set up Morata to nod in the second before the half-hour mark with Rabiot adding a third before the break at the Stadio Dall'Ara.
Morata got the second just after the interval latching onto a ball Juve goalkeeper Wojciech Szczesny blasted up the pitch.
The Spaniard controlled the ball and raced forward to finish off.
Riccardo Orsolini pulled a goal back for Bologna past Juve's third-choice goalkeeper Carlo Pinsoglio who got his first outing this season coming on for Szczesny for the final quarter of an hour.
Earlier Inter Milan were presented with their first trophy in 11 years after a 5-1 win over Udinese in their final game in the San Siro.
Antonio Conte's side had sealed their 19th 'Scudetto' with four games to spare and were able to play their final game of the season with 1,000 celebrating supporters.
Outside more than 4,000 had gathered from early in the morning with fireworks and flares, greeting the team bus with chants and cheers.
Ashley Young struck after eight minutes with Christian Eriksen, Lautaro Martinez, Ivan Perisic and Romelu Lukaku also all on target.