Match ends, Millwall 1, Cardiff City 1.
Neil Harris took a point on his first return to Millwall after Kieffer Moore's goal salvaged a draw for Cardiff City.
Harris was back at the Den for the first time since leaving the Millwall manager's job in October 2019.
The Lions' all-time leading goalscorer seemed set for a miserable afternoon until Moore's low shot cancelled out Matt Smith's first-half header.
Millwall are left without a victory in four matches, while Gary Rowett's team have won just once in six home Championship games this season.
Cardiff have won only one of their last seven league outings, though they were grateful for the late rally which saved them from defeat and saw them climb a place to 15th. Millwall remain ninth.
The contest took a while to get going, with two sides who had not been in great form prior to the international break toiling early on.
There was barely a sniff of an opening goal before Millwall broke the deadlock when Shaun Williams floated the ball into the Cardiff penalty area.
Bluebirds keeper Alex Smithies came off his line but got nowhere near claiming the cross, meaning the towering Smith had the simple task of heading into the empty net as he rose above Curtis Nelson.
Smith's third goal of the season was a welcome boost to the Lions, who had not found the target in their last three Championship games.
But it was another setback for Cardiff, whose only sight of a first-half goal came just before the break when Bartosz Bialkowski did well to push Robert Glatzel's header over the bar.
Millwall wasted a golden opportunity to double their advantage early in the second period as the unmarked Ben Thompson headed Jed Wallace's cross over the top from six yards out.
But Cardiff finally began to threaten as the game opened up, with Moore, Glatzel and Joe Bennett missing the target before ex-Bluebird Scott Malone's loose ball led to the equaliser.
Josh Murphy played a fine through ball to Moore, who drove forward and saw his left-foot effort roll into the bottom corner thanks in part to a touch off the boot of the sliding Jake Cooper.
Cardiff might have won it as Harry Wilson and Moore drew fine saves from Bialkowski, before Millwall wasted their own big opportunity to claim all three points as Jon Dadi Bodvarsson shot wide.
Millwall manager Gary Rowett:
"We go 1-0 up - a great ball in from Willo (Shaun Williams) to Smudge (Matt Smith). We probably didn't put enough balls in like that today. I think Cardiff are a good side - they are always going to give you problems on the ball.
"First half at times because we perhaps couldn't put enough pressure on high up the pitch for different reasons, they can play round that and your wingers end up in a bit of a back six.
"Then we miss the chance which probably seals the game. Then just before Cardiff scored we were probably at our most comfortable.
"Then of course we make a mistake for the goal. It is what it is. We are a team. Whether it's people missing chances or making mistakes, we just get on with it together.
Cardiff City manager Neil Harris:
"Let's get the disappointment out of the way with the goal we conceded. We were disappointed to be behind in a game that had nothing in it first half.
"Then second half we didn't get going for 15 minutes until we made the sub and changed to a 4-2-3-1. Then we looked really threatening and I thought did enough to win the game.
"Curtis and Alex have held their hands up (over Millwall's goal) - lack of communication. We have just got to make sure we cut out those errors.
"We threw to the caution to the wind. We passed the ball really well at times - got between the lines. I understand it's another game without a win and we want to win games of football."
- 19WoodsBooked at 72mins
- 6WilliamsBooked at 88mins
- 8ThompsonSubstituted forBödvarssonat 75'minutesBooked at 90mins
- 20BennettSubstituted forMaloneat 57'minutes
- 10SmithSubstituted forParrottat 76'minutes
- 23H Wilson
- 33HoilettSubstituted forOjoat 61'minutes
- 9GlatzelSubstituted forMurphyat 75'minutes
- 29M Harris
- Graham Scott
- Shots on Target
Second Half ends, Millwall 1, Cardiff City 1.
Jón Dadi Bödvarsson (Millwall) is shown the yellow card for a bad foul.
Alex Smithies (Cardiff City) wins a free kick in the defensive half.
Foul by Jón Dadi Bödvarsson (Millwall).
Attempt blocked. Joe Bennett (Cardiff City) header from the centre of the box is blocked. Assisted by Marlon Pack.
Sheyi Ojo (Cardiff City) wins a free kick in the attacking half.
Foul by Shaun Williams (Millwall).
Attempt missed. Shaun Hutchinson (Millwall) right footed shot from outside the box is high and wide to the left. Assisted by Shaun Williams.
Attempt blocked. Kieffer Moore (Cardiff City) right footed shot from the centre of the box is blocked.
Corner, Cardiff City. Conceded by Shaun Hutchinson.
Shaun Williams (Millwall) is shown the yellow card for a bad foul.
Josh Murphy (Cardiff City) wins a free kick in the defensive half.
Foul by Shaun Williams (Millwall).
Attempt missed. Jón Dadi Bödvarsson (Millwall) left footed shot from the centre of the box misses to the left. Assisted by Ryan Woods following a fast break.
Corner, Cardiff City. Conceded by Bartosz Bialkowski.
Attempt saved. Kieffer Moore (Cardiff City) header from the centre of the box is saved in the bottom right corner. Assisted by Harry Wilson with a cross.
Attempt blocked. Joe Bennett (Cardiff City) right footed shot from the centre of the box is blocked.
Attempt saved. Harry Wilson (Cardiff City) right footed shot from very close range is saved in the centre of the goal. Assisted by Josh Murphy.
Goal! Millwall 1, Cardiff City 1. Kieffer Moore (Cardiff City) left footed shot from the centre of the box to the bottom left corner. Assisted by Josh Murphy with a through ball following a fast break.