Lucas Perez’s close-range finish early in the second half condemned Barca to a second consecutive defeat, on the back of their shock exit at the hands of Eintracht Frankfurt in the Europa League on Thursday.
Barcelona stayed second but are level on points with both Sevilla in third and Atletico Madrid in fourth while Real Betis in fifth are only three points behind. Xavi Hernandez’s team do have a game in hand over the trio below them.
But the loss means Barca have won only one of their last four matches, that victory coming via an injury-time winner against 19th-placed Levante.
Any hopes they had of making leaders Real Madrid feel uncomfortable are surely over, with Madrid 15 points clear at the top, having played a game more.
Cadiz climb out of the relegation zone to 16th, two points clear of the bottom three.
The defeat by Frankfurt on Thursday was a particularly bitter pill to swallow, given the Catalans effectively ceded their home advantage by allowing more than 20,000 away fans into Camp Nou.
Xavi said on Saturday Barca had felt “robbed in their own home” and one of the club’s prominent fan groups boycotted the Cadiz game in protest, with the section behind the goal at one end empty.
Controversy surrounded Gerard Pique on Monday too, after a report by El Confidencial said the defender’s company, Kosmos, are to receive 24 million euros for their part in moving the Spanish Super Cup to Saudi Arabia. Pique was not involved against Cadiz as he had a hamstring injury.
As well as issues around the Frankfurt fans and Pique, Xavi finds himself confronting the team’s first real dip since he was appointed in November.
Barcelona can ill-afford to miss out on Champions League qualification, with the club’s debts at the start of the season amounting to more than a billion euros.
Cadiz should have been in front at half-time but Perez shot wide after being given a simple finish by Ruben Sobrino.
Ousmane Dembele had Barcelona’s best chance but the Frenchman was unable to finish off a driving run, his shot straight at Cadiz goalkeeper Jeremias Ledesma.
Cadiz continued to create the better chances and two minutes into the second half, they took the lead. Jordi Alba lost the ball in midfield and Alex’s cross found Sobrino, whose header was parried by Marc-Andre ter Stegen, only for Perez to follow in.
Alex should have put Barca out of sight but fired wide from Ivan Alejo’s pull-back before Barcelona’s Luuk de Jong, on as a substitute, headed straight at Ledesma.
Sergio Busquets tested Ledesma with a late strike from distance before Pierre-Emerick Aubameyang volleyed straight at the goalkeeper late on, Gavi unable to reach the rebound.