Ryan Allsop 5
A couple of passes off target but on the whole did OK. Neither goal was his fault.
Mahlon Romeo 4
Looked shaken up by the occasion. Was booed with every touch of the ball. Made some rash challenges, lost one-v-ones with Callum Styles and we saw very few of his marauding runs. Just not himself. A tough afternoon for him.
Perry Ng 4
The risk of picking him is that he will get outdone at set pieces and he was for Charlie Cresswell's goal. It's a risk-reward and it didn't come off today.
Cedric Kipre 6 (star man)
The pick of the bunch at the back. Not the first time we are saying that this season, either. Needed his physicality in an otherwise small back line.
Niels Nkounkou 5
Fashioned an excellent chance for Ojo in the first half and generally looked pretty assured. Also had one solo effort denied at the end but was the culprit for Benik Afobe's goal.
Ryan Wintle 5
Just slows the play down sometimes when Cardiff look to counter. Generally neat and tidy but late on when the ball needs shifting he needed to up the pace.
Andy Rinomhota 4
Had to be very combative in the middle of the park due to Millwall being in the ascendancy, but was increasingly quiet as the game went on.
Romaine Sawyers 4
Looked laboured at times, but that's kind of his style. Wasn't given the freedom to dictate things as he would have liked. Had to be subbed. A frustrating one for him, he just can't find that consistency.
Sheyi Ojo 4
Blew hot and cold, really. Lost the ball on occasion and was generally quiet, but did have Cardiff's best first-half chance when he hit the post from close range. Off at half-time.
Max Watters 4
Didn't see a great deal of him before he went off at the break. Did produce a decent cross for a Philogene chance early on. Didn't make much of an impact.
Jaden Philogene 5
Probably Cardiff's most likely attacking threat in the first half, although was guilty of being ponderous on occasions with the ball. Sent a header from Watters' cross just wide of the mark.
Subs:
Mark Harris (Ojo 45) 4 - Pinged one nice effort at the post but was also so wasteful with the ball and gave away possession too often.
Callum Robinson (Watters 45) 5 - Looked bright when he first came on after the break and was a willing runner, but couldn't make that telling impact.
Joe Ralls (Philogene 68) 4 - Couldn't deliver killer set pieces and just got in the way with a couple of poor touches every now and then.
Gavin Whyte (Sawyers 68) 4 - Won a couple of free-kicks but struggled to make a telling impact.
READ NEXT: