Haren (2-5) recorded the sixth shutout and 16th complete game in his 10-year career. He was making his 266th major league start.
The Angels won their third in a row after losing three straight, getting off to a good start when Albert Pujols hit a two-run homer in the first. It was his fifth of the season.
Haren had not won since allowing a lone earned run against Cleveland on April 28. He gave up four hits to the Mariners and did not walk a batter.
After Dustin Ackley singled to open the Seattle first, Haren retired 15 in a row. Only two Seattle runners reached second base.
Pujols scored the other Los Angeles run in the sixth on a single by Kendrys Morales.
The loss went to Jason Vargas (5-4), who allowed the three runs on seven hits over seven innings. Vargas struck out six.
Millions of Getty images now available for free via embed tool
Ray Liotta sues skin care company over use of likeness