После перемещения кораблей перед Ревелем возникла оборонительная стена кораблей, ощетинившихся пушками. Отряд Тета продолжал крейсировать в море; составлявшие его корабль «Кир-Иоанн» и 2 фрегата должны были занять предписанные места после начала атак. Однако в течение дня 1 мая шведы не нападали, и Чичагов писал в очередном донесении, что неясно, решатся ли они атаковать либо только будут препятствовать соединению Ревельской и Кронштадтской эскадр.
Норденшельд, начальник штаба шведского флота, фактический командующий, решил во исполнение приказа короля атаковать утром 2 мая, если ветер будет благоприятствовать. Несмотря на то что линейный корабль и 2 фрегата были посланы к Гангуту, шведы сохраняли двойное превосходство и могли рассчитывать на успех. Светлой ночью шведские корабли и большие фрегаты строятся в боевую линию. Четыре малых фрегата и другие суда составили вторую колонну, шедшую левее и сзади флагманского корабля главных сил. Попутный северо-западный ветер легко надувал верхние паруса кораблей, двигавшихся к Ревелю.
На русской эскадре около 4.00 стало известно о приближении шведов. Отряд Тета снимался с якоря. На всех кораблях заканчивались приготовления. Когда около 5.00 шведский флот, строящийся в боевую линию, показался из-за Наргена, В. Я. Чичагов подал сигнал «Вытянуть шпринг», и корабли развернулись на якорях правыми бортами к фарватеру; затем последовал сигнал кораблям Тета занять свои места. Первую линию составили «Кир-Иоанн», «Мстислав», фрегат «Венус», корабли «Святая Елена», «Изяслав», «Ярослав», «Ростислав», «Победоносец», «Болеслав», «Саратов» и «Прохор». На правом фланге за «Прохором» встали бомбардирский корабль «Страшный» и фрегат, за «Ярославом» — бомбардирский корабль «Победитель» и второй фрегат; фрегаты «Слава» и «Подражислав» заняли позицию за интервалами по обе стороны «Ростислава», а семь катеров развернулись в линию у устья реки, впадавшей в бухту возле монастыря Святой Бригитты.
Убедившись в начале атаки, Чичагов отправил краткое всеподданнейшее донесение. В седьмом часу он созвал флагманов и командиров кораблей. Адмирал мог надеяться на храбрость и опытность собравшихся и потому дал только некоторые рекомендации: экономить боеприпасы, стремиться сбивать парусное вооружение, чтобы лишить противника хода и управления; в контору порта было послано распоряжение держать наготове и выслать по первому требованию судно с порохом и снарядами. Предупреждение получили и береговые власти.
Пока происходил совет и его участники возвращались на корабли, шведы двигались на Ревель. Головным шел корабль «Дристингхетен». Он приближался ко входу на рейд, когда в четырех с половиной милях севернее Наргена второй в линии «Таппенхетен» сел на новую мель. Для шведов это явилось неприятным сюрпризом. Однако пока кораблю ничего не грозило, и линия продолжила движение, оставив «Таппенхетен» его судьбе. Около 8.00 «Дристингхетен» вступил на рейд под верхними парусами, подгоняемый усиливавшимся западным ветром. Он двигался как можно ближе к отмелям острова Нарген; шедшие за ним корабли также несли только верхние паруса. Двадцать один линейный корабль и 6 больших фрегатов с 1700 орудиями направлялись против десяти кораблей и фрегата первой русской линии с 870 орудиями; вес шведского бортового залпа, 12 800 килограммов, вдвое превышал вес русского бортового залпа.
Тем временем ветер крепчал, не позволяя брать рифы у парусов. Корабли оказались в сложном и опасном положении. Однако Норденшельд решил, что уже поздно отказываться от задуманного, ибо это грозило неудачей и королевской опалой. Несмотря на увеличивающееся волнение моря, флот продолжал движение. Кратковременная задержка произошла лишь во время перехода герцога Карла и его штаба на легкий фрегат «Улла Ферзен», который шел головным во второй колонне. Король не желал, чтобы его брат рисковал собой. Герцогу предстояло управлять флотом со стороны; на флагманском корабле оставался флаг-офицер лейтенант Клинт. Шведская линия направлялась на русский строй, а малые суда во главе с фрегатом «Улла Ферзен» ложились в дрейф на середине рейда.
На русской эскадре в 9.30 можно было видеть сигнал «Обедать». Предстоящий бой не нарушил хладнокровия и твердости В. Я. Чичагова, поддерживавшего уверенность подчиненных в своих силах строгим соблюдением обычного распорядка. Лишь после обеда, в 10.00, на «Ростиславе» взвился сигнал «Приготовиться к бою».
В начале одиннадцатого часа первый клуб дыма оторвался от борта «Изяслава», затем второй. Ядра не долетели до шведского головного корабля. Но при все свежевшем западном ветре шведы быстро проходили острова Карлос и один за другим поворачивали на восток. В 10.15 «Дристингхетен», накренившись при повороте на правый борт, двинулся вдоль русской линии; из-за крена его залп, распределенный от «Изяслава» до «Ярослава», оказался безуспешным: ядра не долетели на два кабельтовых. Ответный огонь оказался более эффективным: шведский корабль получил попадания и повернул на север, к острову Вульф.
За следующие полчаса перед русским строем продефилировали корабль «Риксен-Стандер», 44-пушечный фрегат «Камилла», корабли «Дюгден» и «Адольф-Фредерик», получившие свои порции повреждений; их огонь из-за качки оставался малоэффективен. Снаряды либо зарывались в волны при недолетах, либо пролетали между мачтами русских кораблей. Последние продолжали вести огонь как на учениях. Штормовой ветер нарушил шведский строй, в нем появились разрывы, что позволяло русским артиллеристам перезаряжать орудия, тогда как шведы успевали давать по одному залпу.
В начале двенадцатого часа корабль «Форсигтингхетен» максимально приблизился к русской линии и понес крупные потери от русской картечи, но сам из-за крена почти не добился попаданий. Шедший за ним тринадцатый в строю «Густав III» также подвергся сильному обстрелу. На корабль, вышедший к траверзу «Венуса» (ветер, близкий к штормовому, не позволил повернуть западнее), обрушилась масса снарядов, крушивших оснастку. Когда «Густав III» проходил мимо центра русской линии, он лишился управления. Были перебиты штуртрос и рультали, пострадало парусное вооружение, палубу покрывали обломки, из левых грот-вант уцелело только три, стень-ванты и фордуныло, и в конце концов стеньга сломалась, когда в нее попал снаряд. Гибли моряки, работавшие на мачтах. Кровь одного из них облила лейтенанта Клинта, одежда упавшего с мачты матроса заклинила блок фока-брасов, что затруднило маневр. Одно из ядер с «Ростислава» уложило сразу 7 человек, пытавшихся управлять парусами. Командир корабля полковник Клинт, контуженный куском каната, разбил лицо о рупор, в который отдавал приказы, и временно вышел из строя. Без управления «Густав III» дрейфовал на расстоянии 15 метров от русского фронта. В конце линии удалось повернуть корабль на север, и он уходил, провожаемый огнем «Победителя» и «Болеслава». «Густав III» так круто развернулся, что нижние порты правого борта зачерпнули воду, и только приказ флагманского артиллериста закрыть порты спас корабль от опрокидывания.
Четырнадцатый корабль прошел в отдалении. Пятнадцатый, 64-пушечный «Принц Карл», и следующий, «София Магдалина» под флагом командира арьергарда подошли ближе и так круто повернули, что накренились до пушечных портов. Вскоре под артиллерийским огнем «Принц Карл» потерял фор- и грот-стеньги, лишился управления, свалился на русскую линию, встал на якорь вблизи ее правого фланга и спустил флаг. Из 380 моряков и 120 солдат десанта 65 человек было убито и 11 ранено; в плен сдались 8 офицеров, 4 кадета, 412 нижних чинов армии и флота. Контр-адмиральский корабль «София Магдалина» также остался без фор-стеньги, однако, поставив фок, ушел на север благодаря тому, что его загородил корпус «Принца Карла».
Тем временем герцог Зюдерманландский оценил бесперспективность продолжения боя. Когда семнадцатый в строю корабль приблизился к линии огня, на фрегате «Улла Ферзен» появился сигнал, приказывавший не бывшим в бою судам повернуть на север, причем сам фрегат стал одним из передовых в новой шведской линии. В 12.15 огонь прекратился; шведы уходили на север, оставив у острова Вульф «Риксен-Стандер», потерявший паруса, не удержавшийся в строю при сильном ветре и севший на риф около 11.30. Двухчасовое Ревельское сражение завершилось.