Самые значительные силы русской армии Кутузов расположил на правом фланге и в центре, перегородив Новую Смоленскую дорогу. Этим флангом командовал Барклай-де-Толли. Старую Смоленскую дорогу прикрывал выделенный из Второй Западной армии Третий пехотный корпус генерал-лейтенанта Н. А. Тучкова. Левым флангом командовал Багратион.
Историки расходятся во мнениях относительно численности войск обеих сторон. По одним данным силы были приблизительно равны (около 130 тысяч человек и около 600 орудий), по другим – численность русской армии на 15 тысяч человек была больше. Однако следует учесть, что в это число входило около 30 тысяч русских ополченцев и 10 тысяч казаков.
24 августа бой начался в районе деревни Шевардино. Русский отряд был атакован превосходящими силами французов. Шевардинский редут неоднократно переходил из рук в руки, а с наступлением темноты русские отошли на позицию у деревни Семёновское.
Наполеон решил нанести главный удар на Курганную высоту и деревню Семёновское, а вспомогательные удары – на Бородино (частью сил корпуса Э. Богарне) и на деревню Утицу (корпусом Ю. Понятовского).
Сражение началось в 5.30 утра атакой войск Богарне на деревню Бородино, которая была отбита. Не закончились успехом и атаки корпуса Понятовского на Утицкий курган, но они сковали часть сил корпуса генерала Тучкова.
Около 6.00 утра начались атаки основных сил на Семёновские (Багратионовы) флеши, которые продолжались более 6 часов. Флеши несколько раз переходили из рук в руки. Сюда были направлены корпус М. Нея и конница И. Мюрата. После смертельного ранения Багратиона командование левым флангом временно принял генерал-лейтенант П. П. Коновницын. Он отвёл войска за Семёновский овраг и продолжал отражать атаки неприятеля. Начиная с
9.00 утра французы предприняли несколько штурмов батареи Раевского, но были отбиты. После взятия Багратионовых флешей Наполеон сосредоточил здесь свои главные силы – около 35 тысяч человек и 300 орудий.
В полдень Кутузов направил кавалерийские полки генералов Ф. П. Уварова и М. И. Платова в атаку на левый фланг французской армии. Казаки смогли прорвать оборону французов и, ворвавшись к неприятелю в тыл, посеяли там панику. Именно из-за этого третья атака французских сил на батарею Раевского была отложена. Наполеон потратил около 2 часов на выяснение обстановки, в течение которых Кутузову удалось перегруппировать силы русских войск и надёжно защитить левый фланг.
В 14.00 началась третья атака на батарею Раевского, и к 17.00 французам удалось ею овладеть. Однако к 18.00 русские войска заняли позиции на линии от деревни Горки до Старой Смоленской дороги. В конце дня Понятовскому удалось занять Утицкий курган.
Однако Наполеон, видя бесплодность дальнейших атак, приказал отвести на ночлег войска к реке Колоча, оставив взятые ранее русские укрепления.
Русская армия могла продолжать сражение и на следующий день, однако Кутузов принял решение отвести войска к городу Можайску,