Ellis Genge and Chris Brooker scored either side of half-time in a bitterly cold encounter at Clifton RFC.
Dominant throughout the opening period, Bristol took the lead inside ten minutes as Ellis Genge rampaged over from close range, while Morgan slotted the extras.
Ben Leung endured a torrid time against Gaston Cortes at scrum-time and, following a litany of penalties against the head; the Scarlet front rower was yellow carded.
Ellis Genge followed him to the sin-bin for an adjudged dangerous tackle shortly after as parity was restored at fourteen men apiece.
Max Crumpton went close for Bristol late in the first period, but it was Scarlets who troubled the scoreboard next, as Josh Lewis stroked over a straightforward penalty.
Matthew Morgan and Lewis traded three-pointers either side of half-time to move the score to 6-10, before Chris Brooker’s try from the back of a driving lineout restored breathing space for Bristol.
Gavin Thomas could have capitalized on a kick ahead to touch down for Scarlets, while Charlie Amesbury’s powerful break almost resulted in a try at the other end of the field.
In the dying stages, Josh Lewis dabbed down for a consolation try, which Billy McBryde converted to put the home side within a single point.
Scarlets Premiership Select:
Dion Jones; Gavin Thomas, Nathan Edwards, Rhodri Jones, Matthew Jacobs; Josh Lewis, Connor Lloyd; Ben Leung, Ryan Elias, Will Taylor, Jack Payne, Jack Jones (c), Stuart Worrall, Shaun Evans, Trystan Lloyd.
Replacements: Rhys Fawcett (for Ben Leung, 25 mins), Torin Myhill (for Ryan Elias, 65 mins), Josh Helps (for Shaun Evans, 66 mins), Owain Morgan (for Stuart Worrall, 75 mins) Kieran Hardy (for Connor Lloyd, 68 mins), Billy McBryde (for Rhodri Jones, 73 mins), Shaun Pearce (for Dion Jones, 75 mins).
Bristol Rugby:
Luke Arscott; Ryan Edwards, Gareth Maule, Ben Mosses, Charlie Amesbury; Matthew Morgan, Craig Hampson; Ellis Genge, Chris Brooker (c), Gaston Cortes, Ben Glynn, Glen Townson, Joe Joyce, Max Crumpton, James Phillips.
Replacements: Ross McMillan (for Chris Brooker, 64 mins), Kyle Traynor, Jamal Ford-Robinson (for Gaston Cortes, 58 mins), Nick Koster (for Ben Glynn, 66 mins), Will Homer (for Craig Hampson, 66 mins),Callum Sheedy (for Luke Arscott, 77 mins), Tommaso Benvenuti (for Gareth Maule, 69 mins).
Referee: Frank Murphy
Attendance: 1,254