Crawford's blast off Adam Ottavino (1-5) was his third hit of the game and gave the Mariners (77-58), who entered Saturday in a virtual tie for first place in the American League West with the Houston Astros, their 14th win in their last 17 games.
Justin Topa (5-4) allowed two hits over the final 1 1/3 innings.
The Mets (62-74) fell for the eighth time in 12 games.
Teoscar Hernandez had two hits, including a homer, and three RBIs for the Mariners. Dominic Calzone launched a two-run, pinch-hit homer in the sixth while Julio Rodriguez was 1-for-5 with a run-scoring triple.
DJ Stewart hit a three-run homer, Francisco Lindor had a two-run shot and Mark Vientos delivered a solo blast for the Mets. Jeff McNeil tripled home Lindor in the eighth to tie the game at 7-7. McNeil had three hits while Vientos, Stewart and Ronny Mauricio finished with two each.
Mariners starter Luis Castillo gave up five runs on eight hits and two walks while striking out two over five innings. The Mets' David Peterson allowed four runs on seven hits and no walks while striking out four over four innings.
Hernandez led off the second by homering to center. In the third, after Rodriguez's one-out triple scored Crawford, Hernandez singled in the second run with two outs.
Stewart homered in the bottom of the fourth to tie the game at 3-3.
The Mariners went back ahead in the fifth. Crawford was hit by a pitch, went to second on Rodriguez's groundout and to third on a single by Eugenio Suarez, before racing home on Hernandez's sacrifice fly.
Canzone's homer was the Mariners' only hit in their three-run sixth, when Sam Haggerty scored from third after Vientos threw wide of first base on Rodriguez's grounder.
Vientos helped the Mets inch closer in the sixth, when he hit a leadoff homer. Omar Narvaez then walked to chase Castillo, and Francisco Lindor hit a two-run homer off Gabe Speier.
The Mets tied the game in the eighth when Lindor drew a two-out walk ahead of McNeil's triple.
—Field Level Media