Late substitute Rudy Gestede was denied by a brilliant late save from Joel Robles as Middlesbrough were frustrated in their efforts to clamber clear of the relegation dogfight at a freezing Riverside Stadium.
Gestede rose to meet an 88th minute cross from Calum Chambers and powered a header which Robles tipped over the bar to deny Boro a first win in eight Premier League games.
Captain Ben Gibson also had a second-half header cleared off the line for Aitor Karanka’s men while Romelu Lukaku and Ademola Lookman both missed earlier chances for Everton.
Boro boss Aitor Karanka made a point of hailing the “amazing” home crowd for cheering his side on after controversially questioning the atmosphere at the Riverside Stadium over the difficult festive period.
Karanka said: “I think was a good performance once again against one of the best teams in the league - they arrived in good form and we were at least as good as them.
“We were really organised, we had chances and we were confident. The crowd has been behind us and they were amazing once again so it was almost the perfect game.”
Karanka drew parallels with his side’s 3-1 defeat at Goodison Park in September, when three goals in just over 15 first half minutes left his side reeling having been unable to cope with the presence of Lukaku in particular.
“We learned and I think we’ve improved a lot because they lost that game in 15 minutes and now Everton are better than they were. In six months working with Ronald they have improved and we could have stopped them and had the last chance.”
Meanwhile Karanka urged caution over the use of midfielder Gaston Ramirez, who returned as a second-half substitute after missing the last six games with a knee injury and handing in a transfer request last month.
He added: “It’s step by step - he’s been out for more than a month with his knee so I don’t want to make mistakes with injured players. I thought he was going to be more important from the bench like (Adlene) Guedioura and Rudy (Gestede).”
Boro had spent part of last week on a mid-season break in Benidorm and it took them time to re-acclimatise to the plunging north-east temperatures as the visitors had the better of an open first period.
Fresh from his four-goal haul against Bournemouth last week, Lukaku missed the best chance to equal Duncan Ferguson’s club record of 60 Premier League goals when he fired straight at Boro keeper Victor Valdes on the half hour.
Tom Davies had created most of the visitors’ chances up to that point, narrowly failing to reach Ross Barkley’s third minute cross from the right then just beaten by Valdes in a race to reach an Idrissa Gueye’s through-ball.
Adama Traore presented Boro’s most likely early threat, with his lofted shot from the right almost catching out Everton keeper Joel Robles in the 10th minute, but it was Adam Forshaw who missed the home side’s best chance when he hesitated in the box after being played in by Marten de Roon, allowing Robles to clear.
After Lukaku missed the best chance of the half, it was the turn of Lookman to try to break the deadlock, with Valdes blocking his effort from point-blank range after Seamus Coleman’s deep cross.
Lookman also lashed a right-foot shot into the side-netting two minutes before the break but it was Boro who started the second period with more purpose, with Cristhian Stuani heading into Robles’ arms from a Forshaw free-kick.
Everton looked short of ideas at the start of the second period and it took until the hour mark for them to present any kind of threat, as Lukaku’s low cross in front of goal was cut out by Adam Clayton with Lookman lurking.
Boro went close four minutes later when Gibson met Bernardo’s corner from the right and directed the ball goalwards only for Baines to head off the line and away to safety.
But moments later it was Everton’s chance to grab the opener when Barkley threaded a fine low ball through to Lookman, who stabbed a poor shot which was nevertheless well blocked by Valdes.
Alvaro Negredo was inches from connecting with a deep cross from the left by Fabio in the 82nd minute then Gestede, who replaced the Spaniard eight minutes from time, came closest of all.
Middlesbrough: Valdes, Chambers, Bernardo, Gibson, Da Silva, de Roon, Clayton, Forshaw, Traore, Negredo, Stuani. Subs: Ayala, Leadbitter, Guzan, Downing, Ramirez, Guedioura, Gestede.
Everton: Robles, Coleman, Ashley Williams, Funes Mori, Baines, Davies, Gana, Schneiderlin, Lookman, Lukaku, Barkley. Subs: Jagielka, Kone, Lennon, Barry, Valencia, Stekelenburg, Holgate.
Referee: Mike Dean (Wirral)