XHTML 1.0 jest przedstawieniem HTML 4.01 za pomocą XML. Zbiór elementów w obu językach jest taki sam, ale różnice występują w składni.

Najważniejsze różnice:

1. Typ zawartości dla XHTML to application/xhtml+xml (dla HTML to text/html).

2. W XHTMLu znaczniki dla elementów niepustych muszą być koniecznie zamykane (w kolejności odwrotnej do ich otwierania), np. <p> tekst</p>. Elementy puste muszą mieć albo znacznik zamykający albo ich znacznik otwierający musi kończyć się />.

3. Nazwy znaczników i atrybutów muszą być pisane małymi literami. W HTMLu wielkość liter nie miała znaczenia.

4. Wartości atrybutów muszą być zapisywane w cudzysłowach, np. <td rowspan=”2”>.

5. W XHTMLu muszą być zawsze atrybuty z wartością, np. <input checked=”checked”/>. HTML pozwalał na skrócone atrybuty, np. <input checked>

6. XHTML jako zgodny z XML może być łączony z innymi XML-owymi językami, np. MathML.

7. Skrypty i arkusze stylów w XHTMLu należy osadzać w następujący sposób:
<script type="text/javascript">
<![CDATA[
zawartość skryptu
]]>
</script>

8. W XHTMLu nie wolno zagnieżdżać następujących znaczników:
- a - nie może zawierać innych elementów a.
- pre - nie może zawierać elementów: img, object, big, small, sub, sup.
- button - nie może zawierać elementów: input, select, textarea, label, button, form, fieldset, iframe, isindex.
- label - nie może zawierać innych elementów label.
- form - nie może zawierać innych elementów form.