Luke Weaver pitched two-hit ball over eight innings and St. Louis beat the San Francisco Giants 11-2 on Thursday night.
Weaver (5-7) faced two over the minimum and had seven strikeouts. The 24-year-old right-hander carried a perfect game into the sixth inning before giving up a single and Hanson's two-run homer. Weaver then bounced back to retire the final seven batters he faced.
Weaver didn't allow a hit until Gorkys Hernandez reached on an infield single with one out in the sixth. Jedd Gyorko made a diving stop on Hernandez's sharp liner near third base but the ball popped out of his right hand as he attempted to throw. Hanson followed with his homer.
Gyorko had three hits including a home run and drove in five runs to spoil the return of Johnny Cueto after two months on the disabled list. Matt Carpenter and Harrison Bader also went deep while Yadier Molina singled three times.
The Cardinals had a season-high 18 hits - their most since getting 19 against the New York Mets on Aug. 24, 2016.
Alen Hanson homered for San Francisco. The Giants have scored five runs while losing four straight.
Cueto (3-1) was rocked in his long-awaited return from the 60-day disabled list. He gave up four runs in the first inning - one more than he had in 32 innings before going out with right elbow inflammation.
Game two of the series will feature John Gant (2-2, 3.48 ERA) for St. Louis as it will be RHP Dereck Rodriguez (3-1 3.16) to start for San Francisco.