He became the first pitcher since Seaver in May 1970 to allow one hit while fanning 14 or more against the Phillies. Ryan did it in April 1970 and Spahn in September 1960.
''That's as well a pitched game as I've seen all year,'' interim manager Pete Mackanin said. ''He had excellent command of his fastball and the best change-up I've seen all year.''
Strasburg (9-7) allowed only a single to Cody Asche leading off the bottom of the fifth - a hard grounder to right field. He has 27 strikeouts in his last two starts.
The hard-throwing righty struck out the side twice and fanned eight of the last 12 batters he faced. He was still firing 96 mph fastballs in the eighth. Blake Treinen tossed a 1-2-3 ninth to complete the shutout.
Phillies starter David Buchanan (2-9) gave up two runs and five hits in six innings in his best start in a while. Buchanan was rocked in his previous three outings, allowing 22 runs and 31 hits in nine innings.
''I had a lot of thinking to do over the past week,'' Buchanan said. ''I wanted to go out there and pitch with confidence and compete.''
Strasburg struck out 14 one other time, in his major league debut against Pittsburgh on June 8, 2010. He had 13 in 7 1-3 innings in a loss to the New York Mets last Wednesday. This was his longest outing since he went eight innings in a win over Arizona on Aug. 19, 2014. Strasburg has one complete game and shutout in his career. It was against the Phillies on Aug. 11, 2013.
Harper drove one out to center field in the first for a 1-0 lead. He added an RBI single in the third to make it 2-0. Harper hit an opposite-field, two-run shot to left in the eighth off Adam Loewen.
Harper finished 3 for 3 with a walk and four RBIs. He leads the NL in batting average (.338), homers (39) and runs (108).
The Phillies were shut out for the 12th time this season but first since July 21, a 1-0 loss to Tampa Bay.
Phillies: 1B Ryan Howard (knee bruise) and OF Aaron Altherr (elbow bruise) were out of the lineup. Howard went to the emergency room to have his knee drained Monday night after getting hit with a throw. He could miss several games.
LHP Gio Gonzalez (10-7, 3.88) goes for the Nationals in the series finale. The Phillies changed their starter after the game. RHP Alec Asher (0-3, 10.67) will take the mound instead of lefty Adam Morgan.
Follow Rob Maaddi on Twitter: https://twitter.com/AP-RobMaaddi