The 10th-seeded Stephens had little trouble beating No. 14 Daria Kasatkina 6-3, 6-1 Tuesday on Court Philippe Chatrier.
She clinched the victory on her first match point with a forehand winner from the baseline.
Stephens next faces Keys in a rematch from the US Open final.
Keys also reached her first French Open semifinal by defeating unseeded Yulia Putintseva 7-6 (5), 6-4. The 13th-seeded Keys has not lost a set at Roland Garros.
While Putintseva regularly lost her composure, Keys stayed calm throughout. The big-hitting American secured victory on her first match point with a powerful serve that clipped Putintseva’s racket and flew into the crowd.
Keys’ box, including three-time major winner Lindsay Davenport, rose to acclaim the American.
The 98th-ranked Putintseva was trying to become the first player from Kazakhstan to advance to a Grand Slam semifinal.
She had her chances against Keys, troubling her with deft drop shots and spinning, looping forehands, but could not hold her nerve.
After losing the first-set tiebreaker, Putintseva started ranting at her box and struck the ground with her racket in frustration.
Known for her short fuse, she lived up to it, regularly spinning around to glare at her box with looks of incomprehension and hand-flapping gestures, or at other times mumbling to herself in frustration.
In the second game of the second set, she was convinced an incorrect call went in favor of Keys and asked the chair umpire to come down and check it.
“My God,” Putintseva said as she walked away. “I can’t believe … unbelievable.”