Catalans Dragons missed the chance to draw level on points with Super League leaders Warrington as Hull FC went third with a tense home victory.
Fetuli Talanoa and Curtis Naughton got Hull FC off the mark but Louis Anderson reduced the deficit for Catalans.
Sika Manu extended the hosts’ lead but Pat Richards’ double pulled the visitors back in it before the break.
Scott Taylor crossed for Hull FC before Jason Baitieri and Eloi Pelissier went over for the Dragons, but Hull held on.
Marc Sneyd also kicked six goals as Hull’s win took them alongside the French side in the table on 18 points.
The result means Catalans remain in second place, when a win would have sent them level with Warrington at the top.
Catalans’ task was made harder in the second half when forward Remi Casty was sin-binned, but they fought back to within two points of Hull late on after Taylor’s try had put the hosts 26-14 ahead.
The victory was Hull’s ninth win in Super League this season, achieved on the same day that head coach Lee Radford signed a new contract, and it extended their unbeaten run at the KC Stadium to four games.
Hull head coach Lee Radford: “It’s a big result, a big victory against quality opposition, but I wish I’d have stayed in and watched Leeds against Huddersfield!
“It was a bizarre game to watch, I’m not whingeing, we won, it’s a win, but we weren’t at it and there’s so much improvement in us. We need to see that next week in the cup, we have so much to fix up.
“If we’d have got beat, I’d have copped it. We didn’t have the right attitude.”
Catalans head coach Laurent Frayssinous: “I am not very happy, we conceded 15 penalties, winning seven, and I’m not sure we had that lack of discipline compared to Hull.
“Plus the yellow card, plus losing by two points – it’s strange.”
Hull FC: Shaul; Naughton, Fonua, Yeaman, Talanoa; Pryce, Sneyd; Taylor, Houghton, Watts, Manu, Pritchard, Washbrook.
Replacements: Green, Thompson, Hadley, Bowden.
Catalans Dragons: Gigot; Broughton, Horo, Duport, Richards; Bosc, Myler; Casty, Da Costa, Mason, Stewart, Anderson, Baitieri.
Replacements: Bosquet, Pelissier, Mounis, Maria.
Referee: Ben Thaler