ST. PETERSBURG -- Marco Gonzales came into the season as one of the Mariners' biggest questions. But as Seattle has surged into the American League West lead, the 26-year-old southpaw continue to develop into one of baseball's best surprises.

Gonzales threw 7 1/3 innings of two-run ball on Friday as the Mariners topped the Rays, 4-3, at Tropicana Field. After beginning the year as Seattle's No. 5 starter, Gonzales is now 7-3 with a 3.28 ERA and has allowed just three earned runs in 33 1/3 innings over his last five outings.

"Marco was great again," said Mariners manager Scott Servais. "He's really competing well, making pitches when he has to. He made one mistake on the home run, but really impressive. A lot of confidence going with Marco right now. It's great to see. We're going to ride him as long as we can."

Pitching has been the name of the game for the Mariners, who improved to 40-23 and maintained their one-game lead over Houston in the AL West. Seattle has gone 16-4 since May 18, the best 20-game stretch for the franchise since 2003. The Mariners improved to an MLB-best 20-9 in one-run games.

"This is an amazing clubhouse," Gonzales said. "It's one of the [most fun] teams I've played on, for sure. We love playing for each other. We have faith. We don't panic. Even in all these one-run ballgames, we have trust in each other that we're going to pull it out. We pick each other up. On days we're not pitching it great, our offense gets going and vice versa. As long as we keep that going, I think we'll be all right."

Right fielder Mitch Haniger notched his 47th RBI of the season -- third-most in the Majors -- with a run-scoring single in the fifth. Daniel Vogelbach , called up from Triple-A Tacoma prior to the game, went 1-for-2 with a walk and RBI single and Kyle Seager had a pair of hits.

But Gonzales was the story of the night again for Seattle, which has gone 10-1 against the Rays since the start of 2017. The former Gonzaga standout allowed just five hits with no walks and three strikeouts in a 103-pitch gem.

The final hit was an infield single with one out in the eighth by Mallex Smith , who dove to the bag to beat Gonzales on a toss from first baseman Ryon Healy . Gonzales tangled up with Smith and his helmet as it bounced at his feet and fell awkwardly. Gonzales appeared to be OK, but was taken out of the game by Servais.

"I was just trying to avoid the helmet because I saw that coming and didn't want to step on that and snap my ankle," Gonzales said. "I'd hoped it was graceful, but I don't think it was. I'm just thankful I didn't get hurt."

Former Rays closer Alex Colome then surrendered a two-run homer to C.J. Cron to cut Seattle's lead to one before Servais called on Edwin Diaz , who gave up a pair of singles before buckling down for a four-out save, his MLB-leading 22nd of the season.

The Rays have lost eight straight in falling to 28-34, with five of those losses coming against the Mariners.

MOMENTS THAT MATTERED

The Mariners defense has been outstanding of late, but their club-record streak of 15 games without an error ended when Seager couldn't backhand a ball down the third-base line by Daniel Robertson in the third. When Gonzales hit Cron, the Rays suddenly had the bases loaded and were threatening to take advantage of the two-out miscue. But after working the count full, Gonzales struck out Matt Duffy on a cutter to escape the jam.

"Real tough at-bat," Gonzales said. "That was one where you're just looking for windows and trying to attack. I went with the backdoor cutter to finish him there, and I was lucky because that was the first one I'd thrown of the game. I was just trying to remain confident in it and let it rip on the outer half."

SOUND SMART

The Mariners' 20 one-run wins and 29 one-run games are both the most in the Majors. It's the first time a team has had 29 of its first 63 games of a season decided by one run since the 2001 Dodgers and most by an AL team since the 1993 Royals. The 20 one-run wins in the first 63 games is tied for the most since Baseball Reference data is available in 1908, joining the '93 Royals, '89 Astros, '84 Blue Jays, '78 Giants and '66 Indians.

YOU GOTTA SEE THIS

While Diaz got his MLB-leading 22nd save, he got an assist from catcher Mike Zunino, who threw out Joey Wendle trying to steal second with an 81.3-mph throw, per Statcast™, for the final out. His 1.93-seconds pop time was his fastest to second base this season. Zunino has been outstanding at throwing out runners all year and enjoyed having the chance to end a game.

"It's not a very glamorous position, so you don't get many chances to do that, like [Seager] did yesterday or something like that," Zunino said. "To have that opportunity is nice and to be able to help your pitcher out is even better."

HE SAID IT

"We find a way to get it to one run. I wish we had a little more ability to stretch. It happens, but we'll take it. Our guys are executing late, really good defense again tonight by a number of guys. Zunino ends it with a great throw out. That's what it takes. Everybody is chipping in right now, and we'll keep riding it." -- Servais

UP NEXT

Felix Hernandez (6-4, 5.33 ERA) takes on young Rays left-hander Blake Snell (7-3, 2.36 ERA) at 1:10 p.m. PT on Saturday at Tropicana Field. It's a rematch of last Sunday's 2-1 Mariners win in Seattle; Hernandez threw eight innings of one-run ball in that game, while Snell struck out the first seven batters he faced and 12 overall in six scoreless frames. Hernandez is 9-2 with a 1.89 ERA in 17 career starts against the Rays.