В 16.00 находившийся под ветром шведский флот повернул и двигался навстречу русской эскадре; Грейг приказал идти на неприятеля, но корабли «Дерис», «Память Евстафия» и «Иоанн Богослов» при повороте отстали от боевой линии. Флагманский корабль Грейга «Ростислав» шел под всеми парусами впереди линии; он сигналами требовал от арьергарда вступить на свое место.
Когда в 17.00 русский авангард приблизился к шведскому на два кабельтова и неприятель открыл огонь, контр-адмирал Козлянинов начал пальбу, не дожидаясь сигнала адмирала. Скоро сражение вспыхнуло по всей линии. Так как кордебаталия и арьергард не подошли еще близко к неприятелю, адмирал продолжал спускаться с частью кораблей кордебаталии. Некоторые корабли отстали, а «Иоанн Богослов» оказался между линиями и пересек русский строй, направляясь к востоку.
Располагая тремя кораблями, флагман вступил в бой с авангардом шведов; четыре корабля кордебаталии после первых выстрелов также открыли огонь, причем «Ростислав» оказался на дистанции картечного выстрела от генерал-адмиральского корабля. К этому времени флоты были между островом Стеншхер и мелью Калбодегрунд, на полпути от Гогланда до Свеаборга.
Команды 7 кораблей, воодушевленные примером Грейга и Козлянинова, вели бой против 12 шведских и вскоре нанесли им значительные повреждения. «Ростислав» бился с генерал-адмиральским «Густавом III», следующий за ним «Изяслав» — с тринадцатым в линии шведским кораблем и фрегатом. Грейг старался сокрушить противника, используя картечь. Против шведского арьергарда впереди сражались «Болеслав», «Мечеслав», «Владислав»; последний потерял большую часть рангоута и стал мишенью пяти концевых вражеских кораблей, тогда как шесть отставших русских кораблей издали стреляли по шведскому арьергарду. Оба флота, окутанные облаками дыма, медленно двигались на юго-запад.
К 18.30 на передовых шведских кораблях было заметно замешательство. «Густав III» на буксире увели за боевую линию, вышли из линии два передовых корабля и третий, между «Изяславом» и «Ростиславом»; прочие также спустились под ветер, смыкая линию; отступление противника вызвало восторженные крики и наступательный дух даже на отставших российских кораблях.
В ходе боя «Ростислав», воспользовавшись лучше сохранившимися парусами, обошел два своих корабля, стал пятым в линии и снова вступил в сражение, тогда как оказавшийся в конце линии «Владислав» слишком приблизился к неприятелю.
К 19.00 установилось самое тихое маловетрие. Авангард, имея по одному противнику на корабль, энергично атаковал, за ним следовала кордебаталия, и даже арьергард старался не отставать. Но ветер стихал. Около 21.00 шведский флот медленно стал поворачивать; русские также повернули и снова сблизились, причем оказались к врагу левым, неповрежденным бортом. «Ростислав» вступил в жестокий бой со шведским вице-адмиральским кораблем. В наступивший штиль дым окутал поле боя. На закате стрелять можно было только с близкой дистанции. Шведы, пользуясь темнотой, удалялись, уклоняясь от боя. В центре «Родислав» Д. Тревенена, «Святой Петр» Денисона и «Болеслав» Денисова продолжали бой; «Ростислав» картечью и ядрами заставил к 22.00 спустить флаг и сдаться вице-адмиральский корабль «Принц Густав», затем перенес огонь на другие корабли, а посланный с флагмана офицер овладел трофеем. В 22.00 Грейг сделал сигнал прекратить стрельбу из-за ночной тьмы, густого дыма и удаленности отступающего противника.
В 22.30 на «Ростислав» доставили пленного вице-адмирала графа Вахмейстера, представили его флаг и шпагу, которую Грейг, в уважение стойкого сопротивления противника, вернул графу. О себе Вахмейстер сообщил, что он генерал-адъютант короля и командовал авангардом флота и что стеньговый флаг не спустил, пока не пришли русские шлюпки, ибо тот был прибит к фор-брам-стеньге гвоздями. Трофейный флаг был отправлен в Санкт-Петербург и помещен в Петропавловский собор.
Победу омрачила неприятная весть. В начале двадцать четвертого часа унтер-офицер на шлюпке с корабля «Владислав» доставил соображение командира, что корабль серьезно пострадал и может подвергнуться нападению. Грейг решил двинуться на неприятеля, но в дыму в полночной тьме его сигнал не увидели. Адмирал послал шлюпки с привозом на соседние корабли. Однако их командиры сообщили о необходимости ремонта такелажа и рангоута, а легко пострадавший арьергард был далеко. Грейгу пришлось отказаться от попытки вернуть корабль, который уже был взят неприятелем. На следующий день командующий узнал, что командир «Владислава» обратился за помощью командиру корабля «Дерис», но последний лишь послал шлюпку; она вывезла трех мичманов и трех гардемарин, которые сообщили, что флаг уже спущен.
На русских кораблях рангоут и гребные суда были избиты, команды устали, арьергард совсем отстал. В сражении с русской стороны было убито 580, ранено 720, на «Владиславе» взято 470 человек. Шведы указали свои потери в 150 убитых и 340 раненых. Но на одном корабле «Принц Густав» оказалось 150 человек убитыми и 539 пленными, что позволяет поставить под сомнение сведения шведской стороны. В донесении от 14 июля Грейг уточнял:
«Рескрипт В.И.В. от 10 июля я получил. Неприятельский флот 7 числа состоял из 16 линейных кораблей, хотя я и доносил только о 15-ти, потому что многие корабли их были без ютов и один из них был принят мною за большой фрегат. Большие их фрегаты, числом 7, имели артиллерию одинаковую с нашими 60-пушечными кораблями и 12 ф. орудия, и помещены были в линию баталии, которая таким образом состояла из 23 судов, имела над нами немалое преимущество в числе и калибре орудий и в числе старослужащих матросов».
Адмирал отмечал в первую очередь храбрость командующего авангардом и командиров его кораблей:
«Из офицеров отличившихся — командовавшего авангардиею контр-адмирала Козлянинова я, конечно, должен именовать перваго. Корабли же его дивизии: „Всеслав“, „Вышеслав“, „Болеслав“ и „Мечеслав“, все наступили на неприятеля и дрались со всякою храбростию и много терпели в сражении. Но из них два первые: „Всеслав“ и „Вечеслав“ под командою Макарова и Эльфинстона, несравненно более нежели два последние. В кордебаталии все капитаны оказали храбрость, но наносили больше вреда неприятелю „Мстислав“, „Святой Петр“, „Владислав“, также и „Ростислав“, в разсуждении его величины. Но надобно отдать справедливость и кораблям „Родиславу“, „Святой Елене“ и „Изяславу“. Из ариергардии контр-адмирала Фондезина, он со своим кораблем „Кир-Иоанн“ пошел в атаку, но весьма слабо был подкреплен прочими и сражение производилось в дальнейшем разстоянии от неприятеля нежели следовало.
Прилагаю начертание движения разных кораблей нашего флота во время сражения, по которому может быть несколько понятнее мое описание оного, хотя весьма трудно подать ясную идею о морском сражении, где каждый корабль обоих флотов в безпристанном движении. Неприят. флот через час по начале сражения был в большем расстройстве сравнительно с нашим. Маловетрие и штиль, притом и густота дыма препятствовали приведению кораблей в какой-либо порядок. Но по отправленным в Кронштадт кораблям, как своим, так и неприятельскому, можно довольно ясно судить, какое было наше действие».
Всю ночь русские моряки ремонтировали повреждения рангоута и такелажа. Тем временем шведские корабли в темноте были уведены на буксире, а 7 июля легкий юго-восточный ветер позволил шведам уйти в Свеаборг.
Поражение флота у Гогланда разрушило планы шведского короля. Морем овладеть не удалось. Известие о результатах сражения вызвало выступление оппозиционно настроенных офицеров в Финляндии и снятие осады крепости Фридрихсгам. Вступление в войну Дании заставило Густава III обратить внимание на запад и вывести войска из пределов России.