The seven-time champion, who missed the tournament last year, was outplayed by Italian Camila Giorgi initially but fought back impressively to win 3-6 6-3 6-4 on Centre Court.
Having swept all before her in the last two years she played Wimbledon, in 2015 and 2016, American Williams has now extended her winning streak at the All England Club to 19 matches.
This is just her fourth tournament back since giving birth last September, and Williams is one win away from a 10th Wimbledon singles final appearance.
Williams will next face Germany’s Julia Goerges, the 13th seed, who reached her first grand slam semi-final with victory over Kiki Bertens.
The 29-year-old dropped the first set to Dutch 20th seed Bertens but fought back to win 3-6 7-5 6-1.
Angelique Kerber admitted nerves almost got the better of her after needing seven match points to see off Russian youngster Daria Kasatkina.
Kerber came out on top of a spectacular 25-shot rally to force the all-important match point number seven, and finally got the job done as Kasatkina netted a forehand, the German relieved to be a 6-3 7-5 winner.
“We both played at a really high level, starting from the first point,” Kerber said.
Kasatkina had Kerber scurrying and scrambling during some compelling rallies but ultimately a vulnerable serve, which offered up seven double faults, let her down.
Seeded 11th, Kerber seems to be approaching something close to her 2016 peak, when she won her two grand slam titles and reached the final at Wimbledon.
The 30-year-old slipped out of the world’s top 20 after a miserable 2017, but she has rediscovered her game this year.
“I’m looking forward now to playing the semis here,” Kerber added. “That is where I put my focus on right now, not about the results I had before. It’s just about the next match now.”
That next match will be against another 21-year-old in 12th seed Jelena Ostapenko, who won last year’s French Open.
Ostapenko roared into her first Wimbledon semi-final with a display of power-hitting against Dominika Cibulkova.
The Latvian struck 32 winners to just six from her opponent, with Cibulkova’s second serve taking a pummelling, and won 7-5 6-4 in an hour and 22 minutes.
“I knew I had to be aggressive otherwise she would have opportunity for winners so I just went for my shots,” Ostapenko said.
“Angelique is a great player, it’s going to be a battle, a tough match probably with long rallies, but I will prepare well and be confident.”
Know more about Sport360 Application