W3C Markup Validatorのエラー修正やってみた 4【XHTML 1.0編2】

今回も、XHTML 1.0で作られたとあるサイトに行ったW3C Markup Validatorのエラー修正についてまとめてみます。

それでは検証スタートです。

Markup Validation Service

document type does not allow element “style” here

これはstyleタグがbody内にあることが原因です。styleタグはheadタグ内に書かないと検証エラーになるので、headタグ内に移します。

“itemscope” is not a member of a group specified for any attribute

これはMicrodataを使ったパンくずリストで発生したエラーです。タグを見てみます。

この場合の原因は、itemscope属性の値を省略していることが原因です。XHTMLでは属性値の省略はできません。対策としては「itemscope=”itemscope”」と値をきちんと属性値を記述してあげることです。

there is no attribute “itemscope”

Microdataやdata-*属性などはHTML5で導入されました。ですので、XHTMLでは属性がないという検証エラーになります。XHTMLでHTML5の属性もマークアップできるDOCTYPE宣言やDTDの導入方法があるようなことを下記のリンク先で見て試したのですが、成功しませんでした。

Using HTML 5 microdata with XHTML

成功しなかったというのは、検証エラーの数が跳ね上がったということです。W3C Markup Validatorが上記リンクのDOCTYPE宣言に対応してないからかもしれません。

じゃあどうすればいいのかというと、HTML5に変更することです。それができない場合は、W3C Markup Validatorのエラー解消を諦めるしかありません。W3C Markup Validator検証のためにMicrodataやdata-*属性を使わないよう変更するという選択肢はないでしょう。代替策がないので仕方ありません。

end tag for “img” omitted, but OMITTAG NO was specified

XHTMLではタグは閉じタグで閉じるか、あるいは「/>」で終わらないといけません。このエラーはそういったタグの終了に関するエラーです。

ID “ID名” already defined

これは同じ値を持つid属性がページ内に複数存在する場合に出るエラーですが、この修正は結構大変です。そのid属性を使ったCSSやjavascriptをサイトのなかから探し出して修正方法を決める必要があるからです。PHPなどサーバ側でタグを生成している場合はさらに探すのが大変ですね。頑張ってくださいとしか言いようがありません。なので頑張って修正しました。

value of attribute “method” cannot be “GET”; must be one of “get”, “post”

method属性のgetやpostも小文字で書きます。

an attribute value specification must be an attribute value literal unless SHORTTAG YES is specified

自然とXHTMLでやってはいけないことを網羅しているサイトですね・・・。これはタグを見てみましょう。

XHTMLでは属性値はすべてダブルクォーテーションかシングルクォーテーションで囲む必要があります。数値なども同様です。

document type does not allow element “h3” here; missing one of “object”, “applet”, “map”, “iframe”, “button”, “ins”, “del” start-tag

このエラーは、aタグの中にブロックレベル要素であるh3タグを入れていたことで出てきました。aタグの中にはspanなどのインライン要素のみ入れられます。経試しにh3タグをCSSで「display:inline;」としてみましたが、結果は変わらず。まあ仕方ないですね。aタグをh3タグの中に入れるなど入れ子構造を変えて下さい。h3と同様のCSSを作ってh3タグをspanタグに変更するという手もあると思います。

delimiter “/” invalid: only S separators and TAGC allowed here

スラッシュの位置がおかしいというエラーです。このタグを見れば一目瞭然。「</br />」となっていました。もちろんこんな書き方は許されていないので「<br />」と変更します。

document type does not allow element “link” here

これはbodyタグ内で外部CSSファイルを読み込むためのlinkタグを書いていたのが原因です。headタグ内に移動させます。

end tag for element “span” which is not open

これは終了タグはあるのに開始タグがないという珍しいエラーですね・・・。開始タグを忘れていたという場合は開始タグを付ける、どこかから不要な終了タグも一緒にコピペしてきてしまった、などといった場合は終了タグを削除する、という感じで適宜修正します。

there is no attribute “data-id”

これはHTML5から導入されたdata-*属性を使用していると出るエラーです。前述のとおり、W3C Markup Validator検証のためにこれを使わないという選択肢はないです。エラー修正は諦めます。

the name and VI delimiter can be omitted from an attribute specification only if SHORTTAG YES is specified

これは短縮形を使わず、「属性名=属性値」の形にしなさいというエラーですが、まずはタグを見てみます。

これはそもそもscriptタグのdefer属性の使い方を間違っています。defer属性はスクリプトをページのロード後に読み込むことをブラウザに示すための属性ですが、src属性が必須です。要は、外部ファイルのスクリプトを読み込むための指定で、インラインのスクリプトに指定しても無視されます。

ということで、この場合の対策としてはdefer属性を削除する、あるいはインラインだったスクリプトを外部ファイル化する、などあります。後者が本来やりたかったことだと思うので、まずは後者を試した方がよさそうですね。

src属性が定義されていてdefer属性が有効な場合、defer属性は論理値ですので、「defer=”true”」などと修正します。

end tag for element “br” which is not open

ついさっき出てきたエラーと同じですが、brタグの開始タグがないと言われています。タグを見てみます。

・・・そりゃ開始タグはないでしょうね。「<br />」に修正します。

以上でエラーの種類としては大体出尽くしたのではないでしょうか。基本的にXHTML云々の前にマークアップ担当者のレベルがひどすぎた、という落ちでした。

広告
  • LINEで送る