Poprawna odpowiedź to <main>, bo zgodnie ze specyfikacją HTML5 ten znacznik powinien pojawić się w dokumencie najwyżej raz. Element <main> reprezentuje główną, unikalną treść strony, czyli to, co jest najważniejsze dla konkretnego adresu URL. Przeglądarki, czytniki ekranu i inne narzędzia asystujące zakładają, że istnieje jedno główne miejsce, do którego użytkownik może szybko „przeskoczyć”, omijając nagłówek, menu czy stopkę. Dlatego pojedynczy <main> ma duże znaczenie dla dostępności (a11y) i użyteczności serwisu. W praktyce dobrym wzorcem jest struktura: <header> na górę, poniżej <nav> (jeśli jest), potem jeden <main>, a w nim np. <article>, <section>, <aside>, a na końcu <footer>. Wewnątrz <main> możesz mieć kilka artykułów, sekcji, nawet różne widoki aplikacji SPA, ale sam <main> jest tylko jeden. Moim zdaniem warto od początku wyrabiać sobie nawyk: dokładnie jeden <main> na stronę i absolutnie nie zagnieżdżać go wewnątrz <header>, <footer> czy <article>. To jest też zgodne z dobrymi praktykami SEO – wyszukiwarki łatwiej rozumieją, co jest esencją danej podstrony. Dodatkowo, wiele frameworków front‑endowych i systemów CMS zakłada w layoutach pojedynczy kontener na treść główną, który semantycznie powinien być właśnie <main>, a nie np. zwykłym <div id="content">. Taka semantyka sprawia, że kod wygląda czyściej, jest bardziej przyszłościowy i po prostu profesjonalny.
W tym pytaniu łatwo się pomylić, bo większość semantycznych znaczników HTML5 kojarzy się z czymś „jedynym” na stronie, ale w rzeczywistości tylko <main> ma w specyfikacji wyraźne ograniczenie, że powinien wystąpić najwyżej raz. Częsty błąd myślowy polega na tym, że skoro mamy jeden nagłówek graficzny czy jedno duże logo, to ktoś odruchowo zakłada, że <header> też może być tylko jeden. Tymczasem <header> jest elementem, który można stosować wielokrotnie – zarówno jako nagłówek całej strony, jak i nagłówki poszczególnych sekcji czy artykułów. Możesz mieć <header> dla całego dokumentu oraz osobne <header> wewnątrz <article> albo <section>, np. z tytułem i metadanymi. To jest jak najbardziej poprawne i zgodne z HTML5. Podobnie <article> również może pojawić się wiele razy. Jest przeznaczony dla samodzielnych, niezależnych fragmentów treści, które mogłyby funkcjonować osobno: wpisy na blogu, komentarze, wiadomości w serwisie informacyjnym. Typowy layout listy artykułów będzie miał kilka lub kilkanaście elementów <article> w jednym <main>, więc ograniczanie go do pojedynczego wystąpienia byłoby całkowicie sztuczne. <section> z kolei służy do logicznego dzielenia treści na sekcje tematyczne, rozdziały, bloki funkcjonalne. Cała idea tego znacznika polega na tym, że można, a wręcz powinno się go używać wielokrotnie, gdy tylko treść da się sensownie pogrupować. Z mojego doświadczenia wynika, że źródłem pomyłek jest mieszanie pojęć „wizualnie jeden blok na ekranie” z „semantycznie jeden element w dokumencie”. Standard HTML5 bardzo jasno mówi: dokument może zawierać co najwyżej jeden element <main>, który nie powinien być zagnieżdżony w <header>, <footer>, <article> czy <aside>. Natomiast <header>, <article> i <section> są z założenia wielokrotnego użytku i służą do budowania elastycznej, dobrze opisanej struktury strony.