Match ends, Swindon Town 1, Port Vale 0.
Andy Williams headed his 15th goal of the season as Swindon climbed back up to second in League One.
Williams, the Robins' top scorer, converted Nathan Byrne's right-wing cross 11 minutes into the second half.
Vale keeper Chris Neal had stopped a first-half shot from Byrne with his chest, while Swindon keeper Wes Foderingham denied Louis Dodds.
Foderingham made a superb save to stop Adam Yates scoring for Vale early in the second half before Williams' goal.
The Swindon keeper was again called on when Yates fired towards the near post from close range after former Swindon midfielder Mark Marshall had set up an attack.
Jon Obika got the ball in the Port Vale net soon afterwards, only to have his close-range header ruled out for offside.
But promotion-chasing Swindon, who had dropped out of the top two following a 1-0 defeat at home to Doncaster on 20 December, were not to be denied.
Williams's header secured a second straight Christmas victory for Mark Cooper's side following a 4-1 win at Walsall on Boxing Day.
Swindon manager Mark Cooper told BBC Wiltshire:
"We should have been a lot more comfortable. We shouldn't have been only 1-0 ahead.
"We need to be a bit more clinical, when we have chances to kill the game off.
"We're only halfway in the season - there's 23 games to go and an awful lot of football to be played.
"We've just got to keep going."
- 29Rossi Branco
- 4LuongoBooked at 80mins
- 15ToffoloBooked at 90mins
- 20ObikaSubstituted forSmithat 63'minutes
- 17BrownBooked at 54mins
- 15O'ConnorSubstituted forLinesat 58'minutes
- 8DoddsBooked at 39minsSubstituted forCampionat 77'minutes
- 33N'GuessanSubstituted forDanielat 58'minutes
- Darren Sheldrake
- Shots on Target
Second Half ends, Swindon Town 1, Port Vale 0.
Foul by Andy Williams (Swindon Town).
Michael Brown (Port Vale) wins a free kick in the attacking half.
Harry Toffolo (Swindon Town) is shown the yellow card.
Corner, Swindon Town. Conceded by Carl Dickinson.
Foul by Nathan Byrne (Swindon Town).
Mark Marshall (Port Vale) wins a free kick in the defensive half.
Corner, Port Vale. Conceded by Raphael Rossi Branco.
Corner, Port Vale. Conceded by Jordan Turnbull.
Massimo Luongo (Swindon Town) is shown the yellow card.
Foul by Massimo Luongo (Swindon Town).
Chris Lines (Port Vale) wins a free kick in the defensive half.
Substitution, Port Vale. Achille Campion replaces Louis Dodds.
Attempt saved. Massimo Luongo (Swindon Town) right footed shot from outside the box is saved in the centre of the goal.
Massimo Luongo (Swindon Town) wins a free kick in the defensive half.
Foul by Colin Daniel (Port Vale).
Corner, Port Vale. Conceded by Harry Toffolo.
Corner, Port Vale. Conceded by Jack Stephens.
Substitution, Swindon Town. Michael Smith replaces Jonathan Obika.