Rookie Beanie Wells had second-half touchdown runs of 10 and 13 yards and the Cardinals rallied from an early two- touchdown deficit for Arizona's second home win in five tries.
"What we learned from the coaching staff and the veterans around here is not to give up," Wells said, "just to keep on truckin'."
Kurt Warner completed 29 of 38 for 340 yards and two touchdown passes for the Cardinals (6-3), who stayed two games up on San Francisco in the NFC West.
"Parts of the first half seemed so difficult for us to do anything," Warner said, 'then we came back in the second half and sometimes it seemed almost easy."
The 38-year-old quarterback became the 29th player in NFL history to throw 200 touchdown passes. He had his 51st 300-yard passing game, tying Dan Fouts for fourth on the NFL career list.
With Julius Jones out early with a chest injury, second-year back Justin Forsett rushed for a career-high 123 yards, including an 11-yard touchdown run, for the Seahawks (3-6). Coach Jim Mora said Jones has a broken rib and would spend the night in a local hospital as a precaution.
Matt Hasselbeck, who had been bothered by a sore shoulder, was 26 of 52 for 315 yards and a touchdown. He was picked off twice late in the game.
"The shoulder is OK. It's the same, no worse," he said. "I felt like last week I didn't really have much to offer, by way of zip on the ball, but I felt much better this week."
Wells gained a career-best 85 yards on 16 carries and caught two passes for 32 yards. Wells' 29-yard run set up Arizona's final TD, Warner's 18-yard pass to Larry Fitzgerald.
"I think we all see why we drafted him where we did," Warner said, "and what he brings to the table and the power and the strength and explosion that he brings to an offense."
Arizona outscored the Seahawks 21-3 in the second half after two quarters of looking very much like the team that had struggled to a 1-3 record at home.
"We had a number of mistakes but we're an improving football team and we have guys that are stepping up and making plays," Cardinals coach Ken Whisenhunt said, "and that's all you can ask for."
It was a vast improvement for Seattle from its first game against Arizona, when the Seahawks gained just 14 yards on the ground and were 0 for 11 on third downs.
"We played well. We should play well," said T.J. Houshmandzadeh, who had nine catches for 165 yards. "We've got all our offensive linemen back. We moved the ball up and down the field. ... We just didn't score the points."
Mora said his team is getting better.
"I think when we look back at this we'll see that we did improve as a football team today," he said, "but it's not good enough yet, not good enough to beat these guys yet."
Down 17-10, the Cardinals took the second-half kickoff and went 82 yards in 13 plays, Wells gaining redemption with his 10-yard scoring run on fourth-and-1, bouncing outside to the end zone, after his personal foul penalty pushed Arizona back from the 4 to the 19-yard line.
Moments later, the Cardinals held when Seattle had first-and-goal at the 1, and the Seahawks had to settle for Olindo Mare's 20-yard field goal to go ahead 20-17.
"That was a big stand, man," defensive Darnell Dockett said. "... It was big for our offense, our team morale."
Arizona took the lead for good with a quick, four-play, 80-yard drive. Warner's 37-yard pass to Anquan Boldin set up a spinning, 13-yard TD run by Wells and it was 24-20 with 11:20 to play.
Boldin, held out against his wishes in last week's win at Chicago with a high ankle sprain, caught eight passes for 105 yards.
Arizona intercepted Hasselbeck twice late in the game. The most impressive came with the Seahawks on the Cardinals 3-yard line with two minutes to go. Hasselbeck attempted a shuffle pass that Adrian Wilson stepped in to pick off, sealing the victory.
Arizona seemed on the verge of an early lead with the ball second-and-goal at the Seattle 4, when Warner's pass was picked off by Marcus Trufant.
The Cardinals challenged the play and, after a review, officials ruled Trufant had not established himself in the end zone after stepping out of bounds. But two plays later, Tim Hightower was stopped by Trufant and Leroy Hill on fourth-and-goal at the 1.
It took Seattle no time to get out of the hole, Hasselbeck throwing 53 yards to Houshmandzadeh. A facemask penalty against Bryant McFadden added 15 yards to the play.
Forsett's touchdown run capped the 99-yard drive.
Boldin became the fifth fastest player to 7,000 career yards receiving. ... Arizona was without starting LBs Gerald Hayes and Chike Okeafor with back injuries. ... Seahawks LT Sean Locklear started after being out since Game 2 with a high ankle sprain.