2ème étape : écrire le contenu en XHTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Titre de la page</title>
<link rel="stylesheet" type="text/css" media="screen" href="style.css" />
</head>
<body>
<h1>Titre</h1>
<p>texte puis passage à la ligne<br/>suite du texte à la ligne et mot mis en <em>valeur</em></p>
<p>encore du texte avec un mot mis encore plus en <strong>valeur</strong></p>
<img src= 'lien/image.jpg' / alt="image">
</body>
</html>

Dans le fichier XHTML, le contenu est créé à l'aide des balises autorisées par la DTD. La présentation se fera ultérieurement dans le fichier CSS.
Il existe deux types de balise XHTML :
- les balises de type bloc pour structurer la page en plusieurs pavés : <p>, <blockquote>, <h1>...
- les balises inline qui se trouvent à l'intérieur de balises blocs.
Le texte et les sauts de ligne <br> s'écrivent obligatoirement dans des paragraphes <p>. La balise <em> fait ressortir le texte, et le met en italique sur certains navigateurs. La balise <strong> insiste encore plus sur le texte, et le met en gras sur certains navigateurs. <img> devient une balise seule. Il n'est plus possible d'utiliser l'attribut border=0 pour enlever le cadre bleu, cette manipulation s'effectue désormais avec le CSS.