Derek Anderson completed 11 of 20 passes for 152 yards and one touchdown, but also threw one interception for the Browns (10-6), who's season will either end or continue based on the outcome of the Titans and Colts matchup.
Braylon Edwards also had three catches for 67 yards and a score for Cleveland.
Chris Weinke, starting in place of Shaun Hill, who was out with back spasms, completed 13 out of 22 passes for 104 yards and a touchdown. Frank Gore also gained 94 yards on 23 carries for the Niners (5-11).
Darrell Jackson had three grabs for 28 yards and a score in the loss.