"Pitching and defense is going to win you ballgames," second baseman Johnny Giavotella said. "We're not putting a lot of runs on the board, so we need our pitching and defense to step it up."
Richards (8-5) struck out six and walked one, allowing a leadoff homer to Mike Zunino and another on a wild pitch in the sixth after Kole Calhoun staked the right-hander to a lead with a two-run homer in the first.
"Garrett's been throwing the ball well all year long," Angels first baseman Albert Pujols said. "The best thing he's doing this year is relying on his off-speed stuff. Today he made some great pitches to get out of some jams. He's a gamer, man."
Richards has allowed four earned runs in 37 innings over his last five starts against Seattle and is 3-0 in those games. The right-hander's only no-decision this season came against the Mariners on May 5 in Anaheim, when he allowed one run in seven innings before the Angels won 5-4 win on a walkoff homer by Carlos Perez in the ninth.
"Richards is a tough pitcher, and we knew that coming in, so we knew it was going to be a low-scoring game," Seattle manager Lloyd McClendon said. "He's tough. He lived at 69 most of the day and he had a nasty breaking ball."
After Richards' wild pitch to Seth Smith enabled Zunino to score, Freese saved another run by making a diving stop to his right of Smith's ground single with the infield shifted way over against the left-handed batter. Robinson Cano then grounded into a double play on the next pitch.
Seager led off the Seattle fifth with a single and advanced on a wild pitch before he was tagged out on an unassisted double play by Freese that ended the inning, after Freese caught Brad Miller's line drive toward the hole.
"Freese is a great third baseman," said Pujols, who was Freese's teammate in St. Louis before they were reunited with the Angels last year. "A lot of people don't give a lot of credit to him, but if he can get a glove on it, he's going to make the play."
The Angels loaded the bases with no outs in the seventh on a double by Mike Trout, an intentional walk to Pujols and a walk to Freese. Giavotella hit an RBI single, and Pujols scored on a groundout to make it 4-1.
Joe Smith ended the eighth by striking out slugger Nelson Cruz representing the tying run after Zunino's leadoff homer and a two-out, two-base throwing error by rookie shortstop Taylor Featherston. Huston Street got three outs for his 21st save in 23 chances.
Cano was taken to the clubhouse complaining of dizziness, after getting struck on the forehead by Featherston's errant throw past Pujols while the Angels were warming up in the infield before the start of the seventh inning.
The five-time All-Star second baseman had a sizable welt near his temple and was checked by medical personnel for a possible concussion, but no signs of one were found. He was replaced on defense by Willie Bloomquist, after Seattle stranded runners at the corners on a strikeout by Dustin Ackley.
"I've been hit in the head before, but I've never had anything happen like this," Cano said. "He's a young guy, but I don't think there's a reason for him to throw that hard between innings. I didn't hear anything. It hurts more when you don't expect it. Hopefully, everything goes well through the night and I feel good enough to play."
McClendon sounded more optimistic.
"The Angels doctors checked him out and our staff checked him out. From what we've been told, he should be ready to go tomorrow," he said.
To a man, Cano's teammates were relieved that it wasn't anything more series than a bump on the noggin.
"It was scary," losing pitcher J.A. Happ said. "I kind of saw it happen, and it sounded pretty gross. I saw the throw coming high, but I didn't have time to really react or say anything. I'm just glad he's OK, and I'm sure everybody else is, too."
Happ (3-5) gave up four runs and seven hits in seven innings and struck out six.
Angels: SS Erick Aybar was not in the starting lineup for precautionary reasons because of tightness in his left hamstring, which he felt while running out a sacrifice bunt in the sixth inning of Friday night's 3-1 loss. He pinch-hit in the seventh for Matt Joyce and popped out.
Mariners: RHP Felix Hernandez (10-4) is 5-0 with a 1.04 ERA in his last five starts against the Angels.
Angels: LHP Hector Santiago (4-4) is 0-1 with a 4.57 ERA in four starts since beating Detroit 2-0 with 7 1/3 innings of three-hit ball on May 29 at Anaheim.