Sonny Gray struck out 10 and threw six scoreless innings while Brendan Donovan had three hits Monday night, leading the St. Louis Cardinals to an 11-4 home victory over the Detroit Tigers.

Despite the loss, the Tigers still have the MLB-best record of 31-17.

St. Louis has won 13 of its last 15 games while outscoring opponents 85-36 in that stretch.

Masyn Winn, Lars Nootbaar, Alec Burleson, Iván Herrera and Victor Scott II each added two hits in the 16-hit St. Louis attack.

Gray (5-1) allowed just three hits and one walk to pick up the win. Gray rebounded from his last start at Philadelphia when he gave up seven runs on eight hits in 3 2/3 innings.

Sean Guenther (0-1) faced three just batters in his first career major league start in his 38th big league game. Keider Montero relieved after three consecutive hits loaded the bases and led to the Cardinals’ first run. Montero was charged with five runs on eight hits and two walks over 5 2/3 innings.

St. Louis added six runs in the seventh. The big hit in the inning came on a two-run homer by Pedro Pagés.

Phillies 9, Rockies 3: Kyle Schwarber hit his 300th career home run, a 466-foot solo blast off the facing of the third deck in right field off Scott Alexander in the ninth inning, Edmundo Sosa had four hits, including a home run, and Philadelphia rallied past Colorado at Coors Field.

Alec Bohm hit a go-ahead two-run homer in a four-run eighth for Philadelphia, which has won four straight.

Ezequiel Tovar homered, singled and drove in two runs for the Rockies, who fell to 8-39, the worst 47-game start in the modern era.

Royals 3, Giants 1: Kris Bubic threw seven scoreless innings and Vinnie Pasquantino hit a two-run homer in the eighth as visiting Kansas City got past San Francisco.

Giants left-hander Robbie Ray also worked seven shutout innings. He gave up six hits, struck out seven and walked one.

Tyler Rogers replaced Ray to begin the eighth in a scoreless game. Jonathan India’s one-out double preceded Pasquantino’s two-out drive over the right-field wall.

Marlins 8, Cubs 7: Jesús Sánchez hit a leadoff homer and a game-ending triple, finishing with three hits and four RBIs as Miami came back to edge Chicago.

Rookie catcher Agustín Ramírez also went deep in the first inning for the Marlins, who squandered two leads before Sánchez’s two-run triple won it with two outs in the ninth.

Miami was down to its last strike against reliever Daniel Palencia when Derek Hill doubled on an 0-2 count and Javier Sanoja walked. Sánchez then hit a hard smash past first baseman Michael Busch and into the right-field corner, sending both runners home.

Miguel Amaya homered, doubled and drove in five runs for the NL Central-leading Cubs.

Mariners 5, White Sox 1: Julio Rodríguez hit a grand slam, Luis Castillo pitched seven crisp innings and Al West-leading Seattle defeated Chicago for its fourth straight victory.

Castillo allowed three hits, struck out five and walked none in his first win since April 26.

Reds 7, Pirates 1: Austin Hays had three hits and two RBIs, and scored the go-ahead run as visiting Cincinnati beat Pittsburgh for its fifth consecutive victory.

Gavin Lux hit two doubles, his second scoring Hays in the sixth inning to break a 1-1 tie.

Brewers 5, Orioles 4: William Contreras went 4 for 4 and hit a tiebreaking two-out single in the eighth inning as Milwaukee won at home to hand Baltimore its seventh consecutive loss.

Red Sox 3, Mets 1: Jarren Duran had a double and a triple as Boston tagged Mets ace Kodai Senga for three runs — the most he has given up all season — and beat New York at Fenway Park.

Astros 4, Rays 3: Jake Meyers hit a go-ahead home run, and Josh Hader stranded a runner on third in the ninth inning to preserve Houston’s road victory over Tampa Bay.