Müssen Sie Meta- und Link-Tags in HTML schließen?

132

Ich habe gerade jemandes HTML gelesen, der niemals Meta- und Link-Tags im HTML-Kopfbereich geschlossen hat. Der Code hat gut funktioniert; Ist das Schließen dieser Tags optional?

Ich dachte, es wäre fehlerhaft, wenn ein Tag nicht geschlossen würde.

bcollins
quelle

Antworten:

166

Ein Tag muss immer durch das Tag-Schließsymbol geschlossen werden >(wenn wir bestimmte SGML-Regeln ignorieren, die nominell in Nicht-XHTML-HTML gelten, aber nie in Browsern implementiert wurden).

Sie möchten fragen, ob die Elemente durch End-Tags geschlossen werden müssen. Die Antwort ist, dass Nicht-XHTML-HTML (einschließlich HTML5 in der HTML-Serialisierung), kein End-Tag erforderlich oder zulässig ist metaund linkElemente. In der Praxis ignorieren jedoch Browser nur explizites End - Tags für sie, sowie den Fracht-Kult /vor >, wenn Sie sie verwenden. Und HTML5 macht diese Zulässigkeit zu einer Regel, indem es auch die /HTML-Serialisierung formal zulässt .

In XHTML gelten XML-Regeln, sodass jedes Element ausnahmslos sowohl ein Start- als auch ein End-Tag haben muss. Das gleiche Tag kann jedoch für beide Rollen verwendet werden, wenn der Elementinhalt leer ist, z . B. <meta name="foo" content="bar"/>als Abkürzung für <meta name="foo" content="bar"></meta>. Wenn Sie dies verletzen, wenn Sie ein Dokument mit einem XML-Inhaltstyp (XHTML) an einen konformen Browser senden, wird Ihr Dokument überhaupt nicht angezeigt. Stattdessen wird eine Fehlermeldung angezeigt.

Wenn Sie einen XHTML-Server mit dem HTML-Inhaltstyp ( Content-Type: text/html) verwenden, da sich XHTML-Dokumente fast immer im Web befinden, wenden die Browser tatsächlich die Nicht-XHTML-HTML-Regeln an.

Zusammenfassen:

  • normalerweise nur <meta ...>mit nein verwenden/
  • Wenn Sie XHTML wirklich in einem Kontext verwenden, in dem die XHTML-Analyse tatsächlich angewendet wird, spielen Sie nach XML-Regeln (und stellen Sie sicher, dass Sie diese kennen).
  • Wenn Ihr Chef Sie <meta ... />auffordert zu schreiben , tun Sie dies. Es ist nicht nützlich, verursacht aber keinen Schaden (außer wenn Sie versuchen, z. B. anhand des HTML 4.01-Doctype zu validieren).
Jukka K. Korpela
quelle
3
Die Verwendung von /> verursachte ein Problem, bei dem Google Bot das Meta-Robots-Tag nicht erkannte. seltsam!!!
DevZer0
13
Ich finde den Begriff „Frachtkult“ in diesem Zusammenhang unangemessen. Einige Leute schließen diese Elemente, einfach weil sie unterdrücken, dass XHTML sich nicht durchgesetzt hat.
Marcus
6
Pedantenalarm! "Frachtkult" wird in der normalen Praxis nicht getrennt, sondern nur, wenn die gesamte Phrase als Adjektiv für etwas anderes verwendet wird (dh "Frachtkultprogrammierung", "Frachtkult /vor >"). Ich dachte nur, ich würde klarstellen, um das Internet nicht mit mehr Verwirrung zu verwirren. </pedant_alert>:)
Aaron Wallentine
1
@ DevZer0 - bist du sicher, dass der Schrägstrich die Ursache war? Ich würde erwarten, dass Google mit solchen Dingen flexibel ist.
Simon East
2
Ist es nicht ein Grund, das HTML mit den XHTML-Regeln in Einklang zu bringen, das / vor> einzuschließen?
Kyle Delaney
28

Das hängt vom Doctype ab. HTML5 muss nicht geschlossen werden. XHTML tut es.

In HTML5 müssen sogenannte void-Elemente (Elemente, die keinen Inhalt haben können) nicht geschlossen werden, da sie sich selbst schließen. Aber es ist immer noch gültig, wenn Sie sie schließen ..

Lesen Sie hier mehr darüber: void-elements

Sebsemillia
quelle
4
HTML5 verfügt über zwei Serialisierungen, von denen eine (XHTML-Serialisierung) End-Tags obligatorisch macht.
Jukka K. Korpela