Match ends, Millwall 1, Cardiff City 0.
Danny Shittu scored on his first league start of the season as Millwall won for the first time in nine games.
Ian Holloway's men had been desperate for a first victory since they beat Blackpool in August.
They sealed three points when Shittu rose at the back post to head in Shaun Williams's corner and move them into mid-table, two points behind Cardiff.
The result leaves his Cardiff side one of three Championship clubs without an away win all season.
Millwall's busy and direct approach prevented Cardiff from playing a passing game.
But after recovering from the loss of midfielder Aron Gunnarsson - forced off after being accidentally caught in the face by Ricardo Fuller's boot - the visitors should have gone in front when Adam Le Fondre fired too high after being sent clear, then shot straight at David Forde from six yards.
Millwall came close themselves when Scott McDonald sent a shot past the post from long distance but it was only after the home side scored that the game began to open up.
Shittu grabbed his first goal since last November on 54 minutes, although there appeared to be a foul on Bluebirds keeper David Marshall in the build-up.
As Cardiff began to chase the game, it was Millwall who had the better opportunities to score again.
Lee Gregory had two clear sights of goal but could not hit the target while Ed Upson came close with a drive from 25 yards, then shot wide from inside the box.
The Bluebirds almost salvaged a point when Anthony Pilkington's close-range effort was brilliantly blocked by Stoke loanee Andy Wilkinson.
- 16BeeversBooked at 10mins
- 14BriggsSubstituted forWebsterat 72'minutes
- 27McDonaldBooked at 90mins
- 19FullerSubstituted forWoolfordat 78'minutes
- 5Ecuele Manga
- 3da Silva
- 17GunnarssonSubstituted forRallsat 34'minutes
- 14MachedaSubstituted forMorrisonat 62'minutes
- 10Le FondreSubstituted forMaynardat 62'minutes
- Scott Duncan
- Shots on Target
Second Half ends, Millwall 1, Cardiff City 0.
Foul by Ravel Morrison (Cardiff City).
Ed Upson (Millwall) wins a free kick in the attacking half.
Scott McDonald (Millwall) is shown the yellow card for a bad foul.
Craig Noone (Cardiff City) wins a free kick in the defensive half.
Foul by Scott McDonald (Millwall).
Attempt saved. Lee Gregory (Millwall) left footed shot from the left side of the box is saved in the bottom left corner. Assisted by Shaun Williams.
Attempt saved. Martyn Woolford (Millwall) left footed shot from the left side of the box is saved in the centre of the goal. Assisted by Scott McDonald.
Attempt missed. Craig Noone (Cardiff City) left footed shot from outside the box is too high. Assisted by Peter Whittingham.
Corner, Millwall. Conceded by Bruno Ecuele Manga.
Attempt missed. Ed Upson (Millwall) right footed shot from outside the box is close, but misses to the left. Assisted by Lee Martin.
Attempt saved. Anthony Pilkington (Cardiff City) left footed shot from outside the box is saved in the bottom right corner. Assisted by Joe Ralls.
Craig Noone (Cardiff City) wins a free kick in the attacking half.
Foul by Shaun Williams (Millwall).
Sean Morrison (Cardiff City) wins a free kick in the defensive half.
Foul by Lee Gregory (Millwall).
Attempt blocked. Anthony Pilkington (Cardiff City) right footed shot from the centre of the box is blocked.
Delay over. They are ready to continue.
Delay in match David Forde (Millwall) because of an injury.