Недостаток людей исключал сражение в открытом море против вдвое более сильного противника. И тут Чичагов показывает себя как выдающийся тактик. Адмирал принял бой на якоре, превратив корабли в деревянные бастионы. Первую линию составили 10 кораблей и фрегат, за ее разрывами встали 2 бомбардирских корабля и 4 фрегата, третью линию образовали 7 катеров. Правый фланг линии опирался на отмели, левый — на орудия крепости. Обойти с фланга и взять в два огня русские корабли шведы не могли, и им пришлось напасть с фронта. Линия из 21 корабля и 6 линейных фрегатов должна была проходить вдоль всего русского фронта, обстреливая его на ходу. Но качка привела к тому, что большинство шведских снарядов не достигало цели, а русские моряки стреляли без промаха. Несколько вражеских кораблей получили значительные повреждения, один сел на камни и был сожжен шведами, второй сдался. Потери ревельской эскадры составили только 9 убитых и 27 раненых. Увидев безуспешность атаки, герцог Карл приказал отвести еще не бывшие в бою корабли. Его флот крейсировал у Наргена, пока не последовало приказания короля идти для прикрытия гребного флота у Выборга.
Ревельская победа на время успокоила двор. Появление шведского флота недалеко от столицы создало вновь основания для тревоги. Екатерина II выслала в море кронштадтскую эскадру вице-адмирала А.И. Круза, которая 23–24 мая вела упорный бой у Красной Горки, не допуская противника к столице. Когда же прибыл с ревельской эскадрой Чичагов, он принял командование соединенными силами и заблокировал шведский флот, укрывшийся в Выборгском заливе.
Из залива, где стояли шведские корабельный и гребной флоты, несколько фарватеров между островами и мелями вели на запад, юг и восток. Узкий западный фарватер выводил к шхерам, на востоке Березовый Зунд между материком и Березовыми островами — к Котлину. Несколько проходов на юг были опасны, ибо не все мели и подводные камни значились на картах. Шведы кильватерной колонной кораблей преградили южные проходы, позднее заняли и западный проход; в Березовом Зунде расположились гребные суда. Король намеревался десантами под Выборгом отрезать крепость от Санкт-Петербурга и осадить ее с суши. Однако он сам оказался в блокаде.
Флот Чичагова развернулся против шведского. Почти месяц адмирал не спешил атаковать, хотя из столицы его и торопили. Сначала русские корабли оттеснили шведские в глубь залива, заняли все проходы на юге и западе, наблюдали за Березовым Зундом, в котором предстояло действовать задерживавшимся гребным судам. Чичагов рассчитывал атаковать с фронта, тогда как гребная флотилия вице-адмирала К.Г. Нассау-Зигена должна была напасть с востока, а гребные суда Т. Г. Козлянинова из Выборга — ударить в тыл. Однако подготовленное наступление сорвалось по вине Нассау-Зигена, который достиг Березового Зунда только 21 июня и сразу перешел в наступление, не предупредив Чичагова. К ночи 22 июня, когда установился удобный для шведов ветер, его усталые команды прекратили натиск.
Оказавшийся в безвыходном положении Густав III решился на отчаянный прорыв кильватерной колонны кораблей и фрегатов через западный фарватер. Путь ей должны были расчистить брандеры. Вслед за кораблями ближе к берегу следовало самостоятельно прорываться в шхеры гребному флоту. Утром, пока уставшие гребцы Нассау-Зигена отдыхали, шведские гребные суда отошли к своим главным силам, а часть демонстративно атаковала правый фланг русской линии, отвлекая внимание от фланга левого, где корабельный флот прорывался сквозь стоявшие в западном проходе отряды. Корабль и фрегат сгорели от собственных брандеров, несколько судов сели на мель и сдались. Но значительная часть флота вырвалась в море.
Чичагов первоначально выжидал, в какую сторону направятся шведы. Он дал сигнал Козлянинову начать атаку с тыла, затем подкрепил отряды в западном проходе, а когда шведы прорвались, повел главные силы в преследование. Первоначально он приказал своим легким силам атаковать и брать вражеские гребные суда, оказавшиеся в море беспомощной добычей. Увидев, что из-за Березовых островов появляется гребная флотилия, адмирал решил, что Нассау-Зиген и Козлянинов возьмут на себя пленение королевского гребного флота. Он собрал все парусные корабли и устремился за уходившим к Свеаборгу неприятелем. Несмотря на то, что адмиральский корабль вышел из Выборгского залива в числе последних, он оказался среди передовых преследующих. За время погони было взято два шведских корабля, а остальные укрылись под батареями Свеаборга. Чичагову оставалось только организовать наблюдение за портом, чтобы в нужный момент вывести главные силы. Вновь адмирал добился нейтрализации противника практически без потерь.
За Ревельское сражение Чичагова пожаловали орденом Св. Андрея Первозванного, за Выборгское — первым из моряков наградили орденом Св. Георгия I степени.