It still carried gusts of up to 157km/h (98 mph) as it arrived close to the Ha Long Bay tourist destination.
Some 600,000 people have been evacuated from at-risk regions in Vietnam and reports say 11 people have been killed.
China issued a typhoon alert for Hainan island, Guangdong and Guangxi after Haiyan’s path changed.
Vietnamese state media say that although at least 11 people had died, the fatalities appeared to have taken place during preparations for the storm, before it made landfall.
One of those killed was a journalist who died n an accident on her way to cover the storm, reports said.
The typhoon has decreased markedly in strength from the Category Five storm that swept through the Philippines in a day, causing mass destruction.
It is now classified as a severe tropical storm.
By 21:00 GMT on Monday, as it heads into China, it will have become a tropical depression.
Rainfall will be the main hazard. A 48-hour accumulation of 100mm to 200mm is expected, with up to 400mm over high ground.
“But at the same time we also can’t be complacent because having travelled over such a wide expanse of sea it’s picked up a huge amount of moisture and so we can expect very heavy rainfall with potential flooding and landslides and other dangers.”
A resident of Hanoi, Nguyen Thi Uyen, told AFP he had dashed to the supermarket to stock up.
“There was not much left on the shelves… people are worried, buying food to last them for a few days.”
There are reports of rising prices in the capital.
Haiyan earlier swept over Vietnam’s Con Co island, 30km (18 miles) off the coast of central Quang Tri province.
“All 250 people on the island including residents and soldiers were evacuated to underground shelters where there is enough food for several days,” the Tuoi Tre newspaper said.-BBC