But captain Christine Sinclair pulled one back three minutes before the break following a blunder by Karen Bardsley in the England goal.
Ashley Lawrence fired towards the near post, but Bardsley let the ball out of her grasp into the path of Sinclair, Canada's all-time leading scorer, who made no mistake firing in her 155th international goal.
Bardsley was replaced five minutes following the break after her eye started swelling by Siobhan Chamberlain for the first time in the England goal at the World Cup.
Forward Melissa Tancredi looked set to equalise for Canada on 62 minutes but lost time as she hesitated on front of goal before the ball was cleared.
And there were groans of despair from the crowd as Sophie Schmidt sent over on front of goal seven minutes from time.
England next play holders Japan in Wednesday's semi-final in Edmonton, after the defending champions beat Australia 1-0 earlier in the Commonwealth Stadium.
Former two-time winners Germany and the United States play the second semi-final on Tuesday in Ottawa.
-AAP