A truck loaded with sand has collided with a school bus, killing at least 24 young children in the northern Indian state of Uttar Pradesh.

At least two dozen other children were injured early on Thursday when the speeding truck collided head-on with the bus, said Javeed Ahmed, the state's most senior police official.

The children, between the ages of three and 12, were studying at a school in the town of Etah.

Another police officer, Daljeet Chaudhry, said visibility was low due to dense fog.

Mr Ahmed said rescuers were working to free several children still trapped in the wreckage.

The state's education authorities had closed all schools in the district due to a severe cold snap.

Mr Ahmed said the authorities would check why the school had stayed open.

Prime Minister Narendra Modi tweeted his condolences, saying: "Anguished by tragic accident in UP's Etah. I share the pain of the bereaved families & condole (the) passing away of young children."

Accidents are common on Indian roads, with most blamed on reckless driving, poorly maintained roads and ageing vehicles.