A quiet first half at the Liberty Stadium burst into life in the 29th minute when Jordan Ayew crossed for Fernando Llorente to score.
Ronald Koeman introduced Ross Barkley at half-time and Everton threatened more, although Ayew fired against a post.
Romelu Lukaku shot at Lukasz Fabianski while Maarten Stekelenburg saved Llorente’s header and then Leroy Fer’s shot.
Swansea fans’ hearts were in mouths as Lukaku and then Kevin Mirallas both went wide with efforts but despite Everton laying siege in the final 10 minutes Swansea held on.
They go a point above Hull on 35 points and can stay up by beating Sunderland away and West Bromwich Albion at home.
Everton stay seventh.
Man of the match Alfie Mawson (Swansea)