GLENDALE, Ariz. — Yep, the 49ers are undefeated halfway through the season, and Jimmy Garoppolo reminded everyone Thursday night he can be a sensational reason why.

Garoppolo’s career-high four touchdown passes were just enough to lift the 49ers to a 28-25 win over the Arizona Cardinals.

His knack for converting third-down plays, meanwhile, truly saved them in a spooky fourth quarter on Halloween night. That lifted the Cardinals’ spell on the 49ers, who lost their past eight meetings and last won in Arizona in 2013.

The 49ers (8-0) converted 11-of-17 third-down plays, and Garoppolo’s ability to move the chains with third-down completions to Emmanuel Sanders and Ross Dwelley killed the final minutes.

“That’s usually where quarterbacks earn their money,” coach Kyle Shanahan said of third-down prowess. “… He was on tonight throwing and got to the right spots. When it wasn’t there, he made plays with his legs.”

It also effectively served notice to skeptics who questioned Garoppolo’s worth on a team that’s largely won via its rushing attack and dominant defense. Garoppolo shrugged off such talk, that it’s merely “just people” outside the locker room doubting him.

Garoppolo’s career-best game unfolded only after tight end George Kittle injured his knee on their first play, and only after the Cardinals (3-5-1) took a 7-0 lead on their opening possession. Once Garoppolo’s fourth touchdown pass found Dante Pettis, it seemed safe to celebrate, which Pettis did with Michael Jackson’s “Thriller” dance move.

Although Kittle overcame his knee’s apparent hyperextension, the 49ers lost starting linebacker Kwon Alexander to a pectoral injury in the fourth quarter. Alexander will undergo an MRI exam Friday.

Now 5-0 on the road this season, the 49ers next play at home against the Seattle Seahawks on Monday night, Nov. 11.

Here are the highs and lows — or tricks and treats, in the spirit of Halloween — of the Niners’ win.

STUDS 

QB JIMMY GAROPPOLO: Touchdown passes three consecutive drives put the 49ers ahead 21-7 at halftime. Touchdown pass No. 4 came after he went through his progression, saw Pettis beat Patrick Peterson and threw to the back, right of the end zone. On the scoring strike to Kittle, Garoppolo also looked off the defense, then found Kittle open across the middle. Touchdowns Nos. 2 and 3 were to Kendrick Bourne (7 yards) and Emmanul Sanders (fourth-and-goal from the 1).

“He makes some pretty gutsy throws out there, doesn’t he? Goodness gracious,” Kittle said.

Garoppolo’s best pass: a 22-yard completion right into Sanders’ hands, before Sanders could barely look for the ball that moved them to Arizona’s 24-yard line in the third quarter. Garoppolo’s most clutch passes: third-down completions on the game-ending drive, capped by an 11-yarder to Ross Dwelley on third-and-9. Garoppolo was playing in Arizona for the first time since his starting debut in the New England Patriots 2016 season opener, which he won in comeback fashion.

Garoppolo called this win “really fun” and had a “great time out there.” But he wouldn’t go so far to say it was was best football game ever. Instead, he downplayed it as: “Same as every other game. It wasn’t anything different for me out there. Just more opportunities, different opportunities and guys were making plays with the ball in their hands.”

TE GEORGE KITTLE: He overcame a first-play leg injury, and just before the first quarter ended, he scored the game-tying touchdown on a 30-yard catch-and-run. That score came on third-and-3; Garoppolo was 15-of-15 this season when targeting Kittle on third down until the second series, when a third-and-2 pass was broken up by safety Budda Baker. He finished with six catches for 73 yards, as knee and an ankle injury kept him out of the closing minutes.

“I’m great, babe. Always,” Kittle said. “In football, stuff happens and you decide to go back out there or you don’t. I tried to give my team everything I could, and in the fourth quarter, I couldn’t go anymore, and I’m happy to have a guy like Ross Dwelley step up. I can’t say enough about Ross and the plays he made. I’m so happy for him.

“Once something happens, you try to push through as much as you can. But if it comes to the point I feel I’m a liability for the and I’m not the best man for the job, I talked to my coach about it, and we made a decision. I definitely thought Dwelley was definitely more mobile than I was in the fourth quarter.”

Kittle’s 30-yard touchdown catch was impressive in that not only did he beat Baker off the line but he fended him off again at the 9 en route to the end zone. “He made a couple good plays and I just had to remind him I was going to be here all night,” Kittle said.

WR EMMANUEL SANDERS: In his encore, Sanders caught more passes (seven) than any other 49ers wide receiver had in a game this season caught. He finished with 112 yards, and he had a 1-yard, fourth-and-goal touchdown catch to close the first half for the 21-7 lead. He also drew a pass-interference penalty that brought the 49ers to the 5-yard line just before halftime. Meanwhile, Marquise Goodwin is a healthy scratch with the 49ers instead opting to play Sanders and four other wide receivers.

TE ROSS DWELLEY: Filling in for Kittle, he didn’t just make a heroic catch on the final third-down conversion to kill the clock but it’s what he did after the catch: gain a couple extra yards so his 11-yard reception would succeed on third-and-9.

Shanahan said: “Dwelley’s been huge for us this last month. We were messing with Dwelley all week, saying the No. 1 goal in this game was to win but the No. 2 goal was to improve Dwelley’s yards per catch average, because I think he was at 0 or 1, and to do that on the last play was pretty cool. I know the guys were pumped up.”

“He’s kind of like ‘Baby George,’ ” guard Mike Person said. “He got the (yards) he needed today.”

Dwelley’s reaction to the nickname: “Who said that? That’s a freakin’ heck of a compliment. I’m fine with that.”

RB MATT BREIDA: Sore ankle? Of course he’d overcome it like he did so often last season, but, wow, Breida looked as quick as ever on a 31-yard run in the second quarter. He had 65 yards on six carries at halftime, then finished with 78 yards on 15 total carries.

PUNT COVERAGE: Tarvarius Moore and Raheem Mostert combined to tackle Cardinals punt returner Pharoh Cooper for a 1-yard loss at the Arizona 9. The Cardinals totaled 17 yards on three punt returns.

DUDS

HEALTH SCARES: Alexander’s fourth-quarter departure with a chest injury is most concerning. That Kittle leg injury was a frightening way to start, but he returned to action the following series. Defensive tackle Arik Armstead missed time in the first quarter as he felt he had something stuck in his throat.

CB EMMANUEL MOSELEY: His roughest start saw him allow his man, Andy Isabella, go for an 88-yard touchdown in the closing minutes, and the Cardinals’ ensuing two-point conversion pulled them within 28-25.

OPENING DEFENSE: Opponents came out running at the 49ers once again, and Kenyan Drake busted past D.J. Jones and Fred Warner on the opening snap for a 36-yard gain. The 49ers also struggled in opening drives in their previous two road games, at Los Angeles (touchdown run) and Washington (missed field goal). Three-and-outs were forced in the 49ers’ first two games at Tampa Bay and Cincinnati. Drake’s touchdown run came on a sprint to the right pylon.

WARNER’S HANDS: The 49ers linebacker, after letting Drake slip past him on the opening snap, dropped a potential interception later in the half. It would have been his first career interception in 24 games.

DEEBO SAMUEL’S HANDS: The 49ers’ rookie dropped a potential, 13-yard touchdown pass after getting wide open in the end zone just before halftime. He did, however, show grit later and finished with four total catches for 40 yards.

THIRD-DOWN PENALTY: Dee Ford kept alive the Cardinals’ opening drive with an illegal, horse-collar tackle of Kyler Murray. Ford rallied, however, and had one of the 49ers’ three sacks on Murray; Dre Greenlaw and DeForest Buckner had the others.

CARDS QB KYLER MURRAY: Sure, he can be elusive, but his favorite target was to sail a pass well out of bounds as the 49ers applied pressure. Murray was 17-of-24 for 241 yards, with 88 coming on that touchdown to Isabella. Murray had five carries for 34 yards and got sacked three times but escaped others. “He’s like a little squirrel back there, running everywhere,” DeForsest Buckner said.

Murray was the No. 1 overall draft pick — taken one spot ahead of the 49ers’ Nick Bosa, who had an uncharacteristically quiet night (one tackle).


SEASON PASS DIGITAL OFFER

If you have not already, we strongly encourage you to sign up for a digital subscription, which gives you access to all content on the Mercury News and East Bay Times websites. With your support, we can continue bringing these stories — and much more — to your screens. Here’s where to sign up for the season pass: Mercury News, East Bay Times.