The home side dominated the first quarter, with Russell Wilson firing the ball through the middle to Tyler Lockett for a 24-yard touchdown, before Thomas Rawls scrambled over from two yards out soon after.
The visitors struggled to find their rhythm early on, resulting in three punts in the first quarter after converting just two first downs.
Seattle extended their lead further in the second as Rawls, who was starting in place of injured running back Marshawn Lynch, made another big gain, leaving Lockett to haul in his second touchdown catch of the day.
The 49ers started to look more threatening towards the end of the first half, and managed to get some points on the board before the end of the second quarter as Blaine Gabbert connected with Vance McDonald for a touchdown.
San Francisco cut the lead to 10 at the start of the third quarter as Gabbert and McDonald moved the ball again, setting up Phil Dawson for a field goal, but Steven Hauschka soon responded down the other end for Seattle.
Dawson split the uprights again late in the third quarter, but Seattle all-but sealed the win with their first possession in the fourth as Wilson completed a short pass to Rawls, leaving the rookie to sprint 31 yards for his second touchdown of the meeting.
Anquan Boldin hauled in a 28-yard catch to try to give the 49ers some late hope, but Gabbert was unable to keep the drive alive, forcing another punt, allowing Seattle to run the clock down on their next possession.
The Seahawks still had possession as the game headed into the final two minutes, allowing Wilson to kneel behind the line of scrimmage to run down the remaining time, securing the win for the home side.
The result keeps Seattle second in the NFC West with a 5-5 record, while San Francisco remain bottom in the division with three wins from 10 games.