Andy Rinomhota marked his 100th game in a Reading shirt with a goal as the Royals soared to a comfortable win over Coventry City to push them up the table.
Joao showed immense strength and then precision to put Reading in front in the 16th minute before Rinomhota fired in a rare goal just a minute after the restart.
The Royals wrapped up victory as John Swift hit a fierce strike from a 30-yard free-kick to find the top corner after Kyle McFadzean was dismissed for the visitors.
Reading earned their tenth league clean sheet of the season and temporarily move up to third in the Championship table.
A fresh Royals side were looking to push their way up the Championship table after a week away from action after a postponed fixture against Brentford.
The Royals suffered a shock defeat in their away fixture at Coventry, at a time when Veljko Paunovic’s men led the Championship table.
A shaky start almost saw Coventry take the lead inside three minutes. Tom Holmes gave the ball away cheaply, with Rafael Cabral first coming to the rescue to save a one-on-one from Callum O’Hare, before Tom McIntyre beat the forward to the rebound to clear from danger.
The hosts had two free-kicks from similar positions either side of Coventry’s big chance, both of which were taken by John Swift, but to no avail.
The Sky Blues then missed another huge chance to take the lead, in the 13th minutes.
Coventry beat the high press of Reading to get forward and win the first corner of the game. A short corner routine led to a cross from Sam McCallum which found Leo Ostigard unmarked in the middle but he glanced a header inches wide of the far post as another huge chance for the hosts went begging.
They could have been behind, but Paunovic’s side brushed themselves off, worked an attack of their own and punished Coventry with their first sight of goal.
Swift found Lucas Joao with an exquisite long ball and the in-form striker did the rest with a text-book finish. He brought the ball under control with his chest and used his strength to shrug off a challenge before lashing the ball on the bounce past the keeper to take his tally to 14 Championship goals for the season.
Reading were beginning to find their rhythm in attack when Ovie Ejaria’s shot nearly deflected into the path of Joao in the box.
Ejaria then went on a mazy run as he showed him immense footwork before he worked space for a shot instead of squaring the ball for Joao, but was unlucky to see his shot smack the inside of the post and stay out.
Reading should have added to their tally a minute before the break. Ejaria again showed his magic feet to beat a player, before Holmes sent in a superb low cross to the back post which was met by Joao on the stretch, but he missed the target from close range.
Paunovic made a change going into the second-half as Tomas Esteves replaced Holmes at right-back.
The Royals made the perfect start to the second-half as they doubled their lead just a minute after the restart.
The ball fell for Andy Rinomhota who fired the ball past the keeper through a crowd of bodies into the bottom right corner from the edge of the box to mark a century of games with a goal.
Rafael was called into action to keep the Sky Blues from claiming a goal back as he flew to his right at the back post to keep out Ostigard’s header from close range.
Michael Olise looked to have a clean run at goal when Coventry gave away possession just outside their box, but Fankaty Dabo made a cynical challenge just outside of the box and was shown a yellow card.
Olise lined up the free-kick in a favourable position but fired an effort high over the bar.
Kyle McFadzean was given his marching orders as he picked up a second yellow for a foul on Ejaria who was bearing down on goal.
From the resulting free-kick, Reading wrapped up the game with a third as Swift hit a stunning strike from 30 yards which arrowed into the top corner.
That was to be Swift’s final contribution to the match as he was replaced by Alfa Semedo. Dejan Tetek and Sam Baldock entered the contest with just over 10 minutes left in place of Rinomhota and Ejaria.
The substitute Baldock should have put Reading further in front when he broke away on goal one-on-one but scuffed an effort wide of the target.
Despite being three goals up with barely anytime left on the clock, Paunovic was demanding his players to concentrate and keep a clean sheet, which was almost wiped out when Coventry struck the post in the 90th minute.
But the Royals held onto the clean sheet and a valuable three points in their first home game of 2021.
Reading are away at Preston North End on Sunday (12.30 kick-off).
Reading: Rafael, Holmes, McIntyre, Morrison (c), Richards, Laurent, Rinomhota, Swift, Ejaria, Olise, Joao.
Subs: Southwood, Esteves, Semedo, East, Tetek, Onen, Aluko, Camara, Baldock
Coventry City: Wilson, Ostigard, McFadzean (c), O’Hare, Gyokeres, Hyam, McCallum, Dabo, James, Shipley, Hamer
Subs: Camp, Allen, Biamou, Sheaf, Bakayoko, Thompson, Dacosta, Kastaneer, Bapaga
Goals: Lucas Joao 16′, Rinomhota 46′, Swift 72′