Liga - Ten-man Barca given scare by Sporting
But, despite being a man light, Barca continued to control possession and Keita’s superb touch and finish claimed the three points with 11 minutes left, with Xavi adding a lovely third towards the end.
Barca finished the match with nine men after Alexis Sanchez walked off injured in stoppage time, the hosts having used all three substitutes.
Real can restore a 10-point lead with victory over Barca’s city rivals Espanyol on Sunday.
With the suspended Lionel Messi one of a quintet of absent names, the hosts dominated the ball from the off but lacked the cutting edge usually afforded to them by the Argentine.
Otherwise the hosts flattered to deceive, with visiting keeper Juan Pablo untested despite 80 per cent possession for Pep Guardiola’s side.
Untested until he had to pick the ball out of the net when, on 41 minutes, left-back Adriano took matters into his own hands with a surging, direct run down the wing, cutting inside and pulling it back to Iniesta, whose only option was to prod the ball into an unguarded net.
Just before the break there was a second chance to score for Barca but Cesc Fabregas scuffed a weak finish after an excellent pass from Alves.
Having dominated possession, the half-time lead was cue for Barca to go on to control the second half, but they got off to the worst possible start.
Seconds after the restart Pique tangled clumsily with Miguel de las Cuevas on the edge of the box: with the covering defenders wide of the Sporting midfielder’s route to goal, the referee deemed it a last-man foul and showed the Spain defender a straight red card.
It was Barca’s first home sending off in La Liga in over two years and things got worse for them immediately afterwards: as the hosts argued with the referee, Sporting boss Javier Clemente prepared a brave double substitution. One of his entrants, Barral, scored within seconds with a fine near-post finish after Formose Mendy’s low cross caught Barca napping.
Sporting, second bottom and six points short of safety, sensed an unlikely win, and they almost carved the hosts apart again when a fine passing move saw De las Cuevas delay his finish before finding Pedro Orfila, who put well wide.
And in pushing for a second they left gaps at the back that Barca, who were still playing their trademark passing game, were only to keen to exploit.
Sub Sanchez almost made a brilliant entrance but saw his finish put wide by Juan Pablo, the Chilean taking one too many touches after Iniesta put him in.
He did have an impact soon afterwards though when, on 79 minutes, his clever flick put Keita through, the Malian buying space and shifting the ball to his left foot with a smart first touch and burying a curling finish with his second.
Iniesta, who was chasing lost causes as well as pulling the creative strings, turned provider once more with a late assist of some beauty, his scooped diagonal pass releasing Xavi, who finished with a similar touch, one reminiscent of the watching Messi.
Sporting had paid for their adventure; Barca, meanwhile, had not only snatched victory but dragged it alive and kicking from the jaws of defeat.
Their Liga season is still all-but over though, Real unlikely to let their lead slip and third-placed Valencia 17 points shy of Barca.