Some of the most famous battles in British history have no known site. I gathered 88 places that have been proposed for 18 of them, from Boudica’s last stand to Brunanburh, and asked which ones fit what the earliest texts actually say. One of them is on my doorstep.
Where was Mount Badon fought? You can choose: Bath, a hillfort above Swindon, another in Dorset, a hill in West Lothian, a village in Lincolnshire. Where was Brunanburh, the great battle of 937? The Wirral, Dumfriesshire, the Humber, Cambridgeshire. People have argued about these places for centuries, and they still do.
I did not want to add another theory. I wanted to know two simpler things. How far apart are the theories? And how much do the early texts actually narrow things down? Most chroniclers say almost nothing about the ground, but what they do say, a hill, a siege, ships, a river, a lake, a town nearby, can be measured.
Six hundred kilometres of disagreement

For the 15 lost battles with more than one proposal, the two most distant theories are a median of 89 km apart. Four span more than 300 km. Camlann, Arthur’s last battle, leads: its proposals run from the River Camel in Cornwall to Angus, 679 km apart. Badon spans 580 km, Brunanburh 386 km and Boudica’s last battle 325 km.

The tight clusters are the battles whose sources name a place that still exists. The two names for the battle of 910, Tettenhall and Wednesfield, are 6.2 km apart. And every theory for the Battle of Whalley, in 798, fits inside 3.5 km.
The texts say very little
Across all 18 battles I found only 31 clues that can be tested on a map. Two battles, Catraeth and Degsastan, give none: just a name. I turned each clue into a simple check with a stated threshold (is it on high ground? is the sea within 10 km? is there a hillfort to besiege?), measured the ground at every site from open data, and gave each site a score for the share of clues it meets.

Of 85 sites that can be scored, 20 meet every clue and only four meet none. In nine of 16 battles, two or more sites tie for the top. The texts almost never pick a winner.
The early texts rarely pick a winner. They rule a few places out, and leave the rest to argument.
They do rule some out, though. Gildas, writing within living memory, calls Badon “the siege of Badon Hill”. Four hillforts on high ground meet both clues: Liddington Castle, Badbury Rings, Ringsbury Camp, Braydon and Arbury Hill, Northamptonshire. Bath, Geoffrey of Monmouth’s answer from six centuries later, meets neither. It sits in a valley, and the nearest hillfort is 2.5 km away.

Brunanburh is a tug of war. The poem in the Anglo-Saxon Chronicle says the beaten Norsemen fled by ship to Dublin. Writers two centuries later add that their fleet came up the Humber. Bromborough on the Wirral fits the ships but is 157 km from the Humber; the East Riding sites fit the Humber. No site meets all four clues.
Whalley, 798
The battle I care about most is the smallest. Under 798 the Anglo-Saxon Chronicle records “a great battle at Whalley in Northumbria”, on 2 April, in Lent. Symeon of Durham adds who fought: King Eardwulf against Wada, one of the men who had murdered the previous king, “in a place called by the English Billingahoh, near Walalege”. Wada lost and fled.

Walalege is Whalley. Billingahoh survives as Billington, and the Victoria County History reads it as the hill now called Whalley Nab, the wooded hill across the Calder from the village. Wikipedia puts the battle on Billington Moor, and a story from 1896 buried Wada’s dead in the mound at Loe Hill by the Ribble. All five sites lie within 3.5 km. Only Billington meets both clues in full: near Whalley, and on a hill-spur. The Roman road from Ribchester runs 1.9 km from the village, Ribchester itself is 8.3 km away, and York, where Eardwulf was crowned, 88 km. This is the one lost battle in the set where the argument is about which field, not which county.
A pin is not a place
Wikidata, the open database behind many maps and apps, gives a single exact point to 12 of the 17 lost battles. Most sit on one proposal, often the traditional one: Bath for Badon, Dunnichen for Nechtansmere. Brunanburh’s sits at Burnley, a minority theory. Two sit on no proposal at all. Mons Graupius is pinned 41.5 km from the nearest place anyone has suggested, and Edington 20.8 km from the site in Wikipedia’s own article.

How I did this
I took every proposed site named in each battle’s English Wikipedia article (80 of the 88), plus sites from the Victoria County History of Lancashire, the Scottish Archaeological Research Framework and two local sources. Every point comes from OS Open Names, the Atlas of Hillforts, OS Open Rivers, Pleiades, or a grid reference or coordinate in a source; none is guessed. Heights come from AWS Terrain Tiles, rivers from OS Open Rivers, Roman roads from Itiner-e, and the coast from Natural Earth.
This is a tally, not a verdict. It ignores place-names, archaeology and charters, which drive most identifications. It weighs a twelfth-century chronicle the same as a contemporary poem. Many dots stand for a village rather than a field, lakes have been drained, and the thresholds are mine. A site can fit the texts and still be wrong.
Notes and sources
- Proposed sites and clues: English Wikipedia articles on each battle (CC BY-SA 4.0); Victoria County History of Lancashire, vol. 6; ScARF; The Modern Antiquarian, Loe Hill.
- Places and rivers: OS Open Names and OS Open Rivers (OGL v3); Atlas of Hillforts of Britain and Ireland (CC BY-SA 4.0); Pleiades.
- Roman roads: Itiner-e (CC BY 4.0). Elevation: AWS Terrain Tiles. Battle coordinates: Wikidata (CC0).
- Paper, data and code: Zenodo and GitHub.
- I wrote the text, with drafting and editing assistance from Claude (Anthropic), which also helped prepare the analysis code. I reviewed and checked all text and results.

