Match ends, FC Porto 0, Juventus 2.
Substitutes Marko Pjaca and Daniel Alves struck goals within two minutes of one another as Juventus punished 10-man Porto to take charge of their Champions League last-16 tie.
The hosts saw left-back Alex Telles dismissed after two bookings in a 74-second spell, the second after a wild sliding tackle on Stephan Lichtsteiner on 27 minutes.
His side spent long spells in their own half and survived a Paulo Dybala strike against the post before the interval.
But Juve - who had 77% possession - broke through when Pjaca drove low into the net five minutes after coming on and Alves finished from six yards 80 seconds after his own introduction.
The goals ensured Juve's fourth successive 2-0 win on the road in all competitions and their advantage now looks huge ahead of the return on 14 March. Other than a penalty shootout defeat to Inter Milan in December, the last time the Old Lady lost on home soil was in August 2015.
Telles' telling moment
In Porto the Italian side were bettering possession when Telles lost control, first fouling Juan Cuadrado before hacking Lichtsteiner down with no apparent danger. The left-back was clearly emotional as he walked to the tunnel with his shirt covering much of his face.
It allowed Juve to totally dominate, though Nuno Espírito Santo's side improved after the break and looked like they may hold out, deploying a compact 4-4-1 formation to stifle the Serie A leaders.
But with the game in its final quarter, Pjaca benefited from a ricochet off Miguel Layun - who came on at left-back after Telles' dismissal - to slam his first goal since joining the club in July past Iker Casillas.
Alves chested down Alex Sandro's delivery and hooked in on 74 minutes to tighten Juve's grip. Massimiliano Allegri's side hold a seven-point lead at the summit of Italy's top tier and remain undefeated in the Champions League, increasing their hopes of a first win in the competition since 1996.
Man of the match - Miralem Pjanic
"I have a good feeling" - the key quotes
Juventus midfielder Sami Khedira: "I think we can be happy tonight. It's a really good result. After the red card we had to win this game. We played 90 minutes with control and patience.
"We are happy for tonight but in three weeks we have to be very careful for the game because now they are angry. We know football is crazy, anything can happen.
"Sometimes you have a feeling and this year I have a really good feeling."
Juventus manager Massimiliano Allegri: "This team still has plenty of room for improvement but the lads showed great maturity tonight. "We're entering a crucial period of the season and we need to approach it with enthusiasm, determination and be as clinical as possible.
"But we can't believe 2-0 is enough to see us through. We have to broach the return as if it's still nil-nil."
Line-ups
FC Porto
Formation 4-1-3-2
- 1Casillas
- 2Pereira PáezBooked at 45mins
- 28Felipe
- 5Marcano SierraBooked at 89mins
- 13Alex TellesBooked at 27mins
- 22Danilo
- 16HerreraBooked at 85mins
- 6NevesSubstituted forJM Coronaat 61'minutes
- 8BrahimiSubstituted forJotaat 73'minutes
- 10André SilvaSubstituted forLayúnat 30'minutes
- 29Francisco Soares
Substitutes
- 4Boly
- 12Sá
- 17JM Corona
- 19Jota
- 20Brás André
- 21Layún
- 30Torres Muñoz
Juventus
Formation 4-2-3-1
- 1Buffon
- 26LichtsteinerBooked at 50minsSubstituted forAlves da Silvaat 73'minutes
- 15Barzagli
- 3Chiellini
- 12Alex Sandro
- 6Khedira
- 5Pjanic
- 7Ju CuadradoSubstituted forPjacaat 67'minutes
- 21DybalaSubstituted forMarchisioat 86'minutes
- 17Mandzukic
- 9Higuaín
Substitutes
- 4Benatia
- 8Marchisio
- 20Pjaca
- 22Asamoah
- 23Alves da Silva
- 24Rugani
- 25Neto
- Referee:
- Dr. Felix Brych
- Attendance:
- 49,229
Match Stats
- Possession
- Home24%
- Away76%
- Shots
- Home3
- Away19
- Shots on Target
- Home0
- Away4
- Corners
- Home1
- Away8
- Fouls
- Home12
- Away13
Live Text
Post update
Full Time
Second Half ends, FC Porto 0, Juventus 2.
Post update
Hand ball by Giorgio Chiellini (Juventus).
Booking
Marcano (FC Porto) is shown the yellow card.
Post update
Gonzalo Higuaín (Juventus) wins a free kick in the attacking half.
Post update
Foul by Felipe (FC Porto).
Post update
Attempt missed. Sami Khedira (Juventus) right footed shot from the centre of the box is close, but misses to the left. Assisted by Marko Pjaca with a through ball.
Substitution
Substitution, Juventus. Claudio Marchisio replaces Paulo Dybala.
Booking
Héctor Herrera (FC Porto) is shown the yellow card for a bad foul.
Post update
Marko Pjaca (Juventus) wins a free kick in the defensive half.
Post update
Foul by Héctor Herrera (FC Porto).
Post update
Corner, FC Porto. Conceded by Mario Mandzukic.
Post update
Corner, Juventus. Conceded by Felipe.
Post update
Offside, FC Porto. Iker Casillas tries a through ball, but Soares is caught offside.
Post update
Foul by Gonzalo Higuaín (Juventus).
Post update
Maxi Pereira (FC Porto) wins a free kick in the defensive half.
Post update
Corner, Juventus. Conceded by Felipe.
Post update
Attempt blocked. Miralem Pjanic (Juventus) right footed shot from the right side of the box is blocked. Assisted by Paulo Dybala.
Post update
Corner, Juventus. Conceded by Marcano.
Goal!
Goal! FC Porto 0, Juventus 2. Dani Alves (Juventus) left footed shot from the centre of the box to the bottom left corner. Assisted by Alex Sandro with a cross.