Redskins quarterback Kirk Cousins (8) celebrates as running back Rob Kelley (20) scores the game-winning touchdown. (Jonathan Newton/The Washington Post)

Amid the Washington Redskins’ recent two-game slide, a growing chorus of critics carped that quarterback Kirk Cousins was too risk-averse to be great and that second-year wide receiver Josh Doctson was destined to be a first-round bust, a finesse player of suspect toughness who would never cut it in the NFL.

But after outplaying the Seattle Seahawks under miserable conditions Sunday only to let their lead slip away in the final two minutes, the Redskins got their late-game heroics from Cousins and Doctson, who collaborated on a 38-yard completion that set up the go-ahead touchdown in one of the Redskins’ more improbable recent upsets.

Fueled by a fierce defensive effort and abetted by a penalty-prone opponent, the injury-depleted Redskins out-toughed the Seahawks for a 17-14 victory that silenced a raucous crowd at Century­Link Field. In the process, Cousins, whose voice was raw from screaming over the crowd of 68,927, took a major step toward silencing his own critics in engineering the game-winning drive that turned on a 31-yard completion to wide receiver Brian Quick, followed by the throw that took a diving Doctson to the 1.

Running back Rob Kelley carried the final yard for the score after Seahawks quarterback Russell Wilson appeared to have the game won, sloughing off an uncharacteristically sloppy three quarters to engineer a touchdown drive capped by a 30-yard strike with 1:34 remaining.

Redskins free safety DeAngelo Hall, returning from injury, breaks up a pass intended for Seahawks tight end Luke Willson. Hall would have an even bigger play at game’s end. (Jonathan Newton/The Washington Post)

But it took a final defensive stand, with safety DeAngelo Hall helping deny Wilson’s last-ditch heave with four seconds remaining, to seal the victory that lifted the Redskins to 4-4.

“I put it out there pretty far,” Cousins said of the throw (an audible) to Doctson, “and he went and got it and showed why he has a lot of potential, why we’re excited about him. I hope it’s a sign of things to come.”

The Redskins got help from the Seahawks’ directionally challenged place kicker, Blair Walsh, who sent all three of his field goal attempts — all in the first half — wide left. They also were helped by Seattle’s 16 penalties and two turnovers.

To look at the final statistics, the Redskins had little to brag about.

They netted just 244 yards of offense — much of that coming on their final drive — while allowing Seattle 437. And their running game was barely a factor, accounting for just 51 yards.

Playing behind an offensive line that lacked four starters, Cousins was sacked six times as he operated without his most trusted targets, wide receiver Jamison Crowder and tight end Jordan Reed, who were among six starters relegated to the sideline by injury.

But Cousins battled on, completing 21 of 31 passes for 247 yards. Kelley supplied both Redskins touchdowns on one-yard carries.

Kirk Cousins 21 of 31 passes for 247 yards as the Redskins improve to 4-4. (John McDonnell/The Washington Post)

Wilson was 24 for 45 for 297 yards with two touchdowns and two interceptions.

The game got underway under a cold, driving rain mixed with pellets of ice, and the caliber of play was as ugly as the weather.

Both teams punted on their opening series, and Cousins, who had trouble gripping the ball early, was nearly intercepted twice.

In Crowder’s stead, Redskins Coach Jay Gruden sent out Hall, playing in his first game since a knee injury ended his 2016 season in Week 3, to field the first punt. He was clobbered.

A fumble on a bad handoff by Cousins to running back Samaje Perine resulted in the first turnover, but Seattle responded with a three and out.

Hall opted not to field the second punt, which backed the Redskins up to the 6 for their second series. Cousins was immediately sacked and dropped for a loss that resulted in a safety, handing Seattle a 2-0 lead.

Walsh squandered a chance to pad that lead, missing from 44 yards.

Cornerback Kendall Fuller provided the Redskins’ first bright spot, intercepting Wilson to hand the offense the ball on the Washington 43. But they went three and out.

The Redskins averaged just 1.5 yards per play through the first quarter, but the Seahawks’ penalties, combined with crisp tackling by the Redskins’ defense, stalled the score at 2-0.

After cornerback Bashaud Breeland broke up a potential touchdown reception, Walsh blew another scoring opportunity for Seattle, missing from 39 yards.

Hapless offensively to that point, the Redskins were lucky to trail just 2-0.

Cousins finally found a friendly target in tight end Vernon Davis, who made two catches for first downs. A pass interference call on Seattle moved the ball to the 1. And after being denied on his first attempt, Kelley plunged in for the game’s first touchdown to give the Redskins a 7-2 lead with 2:52 remaining in the first half.

Wilson tried to avert a first-half shutout from his offense as the half ticked down. Safety D.J. Swearinger broke up a deep throw, and the drive ultimately fizzled. With a chance to redeem himself, Walsh stepped up for a 49-yarder with two seconds remaining. It, too, sailed left of the uprights, and boos from the home crowd followed.

The second half opened with more of the same. Seattle punted away its opening series, and kicker Nick Rose extended the Redskins’ lead to 10-2 on a 28-yard field goal.

It wasn’t until the fourth quarter that Seattle’s offense snapped out of its futility.

Wilson connected with a wide-open Luke Willson, and the tight end sped past a diving Zach Brown for a 10-yard touchdown catch. Seattle’s two-point conversion attempt failed, with Swearinger intercepting the throw, keeping the Redskins’ lead intact at 10-8.

The Redskins had a chance to put the game out of reach with under four minutes remaining, but a promising drive stalled on Tyler Catalina’s needless block in the back. Cousins was sacked a sixth time, and the Redskins were forced to punt.

Wilson put Seattle ahead with a 30-yard strike to Baldwin with 1:34 remaining.

That’s when Cousins dug in. He threw blindly as he was knocked to the ground, then craned to see Quick grab the 31-yard pass. Then, liking the coverage he saw, he heaved the 38-yarder to Doctson.

“It was big,” Fuller said afterward. “Feeling like [the defense] gave up the game, for [the offense] to pick us up, emotionally, physically, spiritually and go down and score — make two big plays — was definitely big.”