外部から預かった記事枠の見られ方が整理された

つくば市のホームページ制作会社

Googleの検索品質チームが8月28日付で、サイトの評判に関するポリシー(site reputation policy)の運用を見直すと公表した。あわせて、スパムポリシーの文書側にも、判断で見る観点が書き足されている。他社から持ち込まれた記事やコンテンツ枠を自社ドメインに載せているサイトにとっては、目を通しておく価値のある更新だと思う。

このポリシーはもともと、信頼を積んだサイトの評価に相乗りする目的で第三者のコンテンツを載せる行為を対象に、2024年に導入されたものだ。今回の文書では、第三者の記事があること自体は問題ではなく、そのサイトが既に持っている評価を当て込んで載せている場合だけが対象になる、と改めて念を押している。通信社の配信記事、フォーラムやコメント欄のような投稿型の場、寄稿やコラムなど編集上の性格を持つもの、そして記事広告のうち読者に直接届けることが目的のものは、対象外として名指しで挙げられた。

人の目で確かめられる観点

興味深いのは、人による確認で何を見るのかが箇条書きで示された点だ。挙がっているのは、見せ方(デザインや組み方、文字まわりが本体と揃っているか)、品質(本体側では出てこない品質の問題がそのページにないか)、書き手の明示(誰が責任を持つのかが書かれているか、それを疑わせる材料がないか)、そして同じ内容がほぼそのまま他のサイトにも載っていないか、の四つ。どれか一つで決まるものではなく、状況に応じて重みが変わるとも添えられている。

具体例も併記されている。提携先と組んだクーポン欄でも、本体から辿れる場所にあり、責任の所在と問い合わせ先が示され、独自の分類や編集の手が入っていれば対応の対象になりにくい。逆に、書き手も担当編集も分からず、本体の各セクションから辿れず、外部の販売サイトと同じ文面をなぞっただけのアフィリエイト記事は、対応の対象になりやすいとされている。判断の軸が、掲載の形式ではなく編集の関与の度合いに置かれていることが読み取れる。

もう一点、8月30日から、このポリシーに基づく手動対策の効き方が欧州経済領域(EEA)の内と外で変わる。域外では従来どおり該当部分の検索結果に影響し、域内では手動対策の影響を適用せず、その区画を本体と切り離して単独で評価する形にするという。欧州委員会との協議を踏まえた措置で、通知はいずれもSearch Console経由で届き、再審査リクエストの窓口も残る。

日本国内のサイトは域外の扱いになるので、実務上の見え方はこれまでと変わらない。ただ、提携先から預かるクーポン欄や、外部の書き手による特集ページを持っているなら、書き手の明記、本体と揃った見せ方、他所と同じ文面の使い回しを避けること、この三点はそのまま点検項目になる。サイトの一角を外部に貸す形の企画は中小企業のサイトでも珍しくないので、運用の担当者と共有しておくと安心だ。

プラグインのファイルは変わらないまま管理画面が狙われた

つくば市のホームページ制作会社

WordPressのプラグインは、更新のたびに配布元のファイルが差し替わる。だから「更新していないなら中身は変わっていないはず」と考えるのは自然で、実際その通りであることがほとんどだ。ところが今月、その前提の外側から入られた事例が報告された。プラグインのファイルは一行も書き換わっていないのに、管理画面を開いた管理者のブラウザで攻撃用のコードが動いていた、という話である。

対象になったのはBdThemesというElementor向けアドオンの開発元で、Element PackやPrime Slider、Ultimate Post Kitなど七つの製品が影響を受けた。WordPress.orgの公式ディレクトリでは、調査のあいだこれらの配布が一時停止されている。

更新していないサイトで何が起きていたか

報告によると、これらのプラグインにはBiggoptiという内部の部品が入っていて、開発元のサーバーから宣伝用のバナー情報をJSONで取得し、WordPressの管理画面に表示していた。攻撃者はそのJSONが置かれていたDigitalOcean Spacesのバケットに書き込める状態を手に入れ、正規のバナーデータを細工したものに差し替えた。

プラグイン本体は公式ディレクトリに置かれたまま、一文字も変わっていない。変わったのは、プラグインが管理画面を開くたびに取りに行く先の中身だけだ。セキュリティ企業のWordfenceがファイアウォール側でこの攻撃を検知したのが8月7日、公式ディレクトリでの配布停止が8月8日。汚染されたデータに残っていた日付をたどると、6月下旬には動き始めていた可能性があるとされている。

囲い忘れた一箇所が入口になった

差し替えられたデータが、それだけで害になるわけではない。効いてしまったのは、受け取った値の扱いに抜けがあったからだ。BiggoptiはJSONに含まれるdisplay_idという値を、エスケープしないままHTMLのid属性に埋め込んでいた。つまり外から届いた文字列が、そのままHTMLの一部として書き出される状態になっていた。

これはクロスサイトスクリプティング、いわゆるXSSの典型で、危険度はCVSSで5.4、中程度と評価されている。単体の欠陥としては目を引く数字ではない。ただ、値の供給元が攻撃者の手に渡った時点で、その中程度の欠陥が管理者のブラウザで任意のコードを走らせる経路に変わった。

調査で指摘されているのは、すぐ隣にある別の属性はきちんとエスケープされていた、という点だ。意図的な仕込みではなく、3月に入った変更のときの見落としとみられている。5月に追加された無害化の処理も、この属性までは届いていなかった。

ログイン中の管理者の権限がそのまま使われる

埋め込まれたコードは、アニメーションの開始をきっかけにするイベントハンドラを使い、管理画面が描画された直後に動く。そこから外部のサーバーへ追加のスクリプトを取りに行き、開いている管理者のセッションとnonceを借りる形で、REST API経由で新しい管理者アカウントを作る。

続いて、無害そうな名前の偽プラグインを追加し、その中にウェブシェルを置く。さらにMust-Useプラグインの領域へ居座り用の部品を仕込み、特定のURLパラメータを付けるだけでログインなしに管理者として入れる裏口を用意していた。もうひとつの部品はデータベースへの問い合わせに介入し、作成された管理者アカウントを利用者一覧から隠したうえ、人数の表示までつじつまを合わせていたという。

作られるアカウントの名前や連絡先は、サイトのホスト名から機械的に導ける形になっていた。攻撃する側は被害サイトの一覧を持ち歩かなくても、あとから同じ資格情報を計算し直せる。裏を返せば、調べる側にとっては何を探せばよいかがはっきりしているということでもある。

手元のサイトで確かめられること

この件が厄介なのは、ファイルの比較やプラグインのバージョン確認では手がかりが出てこないところだ。見るべきなのは結果として残ったもののほうで、具体的には管理者アカウントの一覧、プラグインディレクトリとMust-Useプラグインの中身、そしてオプションを保存しているテーブルになる。心当たりのない管理者が増えていないかは、専用のツールがなくても管理画面から確認できる。

より広く見れば、管理画面に外部から取ってきた内容を表示する部品は珍しくない。宣伝バナー、開発元からのお知らせ、キャンペーンの案内など、有償版の販売を持つ製品ほど組み込まれている。今回はその仕組みそのものが悪いというより、外から届いた値を自分のHTMLに置くときの手当てが一箇所抜けていたことが決め手になった。作る側の視点では、遠くから来た文字列は例外なく汚れているものとして扱う、という基本の話に戻る。

制作を請け負う立場だと、納品後のサイトは触る機会が減り、更新の通知が出ていなければ問題なしと見なしがちだ。今回のように配布物が無傷のまま影響が出る攻撃があると分かった以上、管理者の一覧をときどき眺めるくらいの軽い確認は、手間の割に効き目がありそうに思える。

ブラウザのXSLT廃止でサイトマップの見た目が素に戻る

つくば市のホームページ制作会社

ブラウザに長く備わっていたXSLTの機能が、いよいよ外される段階に入った。Chromeの開発者向け資料によると、対象はXSLTProcessorというJavaScriptのクラスと、XMLの先頭に書く text/xsl の処理命令の両方だという。安定版で動かなくなるのはバージョン158、2026年11月17日の予定とされている。8月25日に出たバージョン152からは、期限を過ぎても使い続けたいサイト向けの試験的な仕組みも始まっていて、企業向けのポリシー設定と合わせると2027年8月までは猶予が取れる形になっている。

背景に挙げられているのは安全性の話だ。変換を担ってきたlibxsltは年季の入ったC/C++のコードで、メモリまわりの脆弱性が出やすい。それでいて実際の利用は少なく、XSLTが関わるページ表示は全体の0.02%ほど、処理命令に限れば0.001%未満だという。使われる機会に対して攻撃対象としての面積が大きすぎる、という判断になる。同じ理由でXMLの解析に使われてきたlibxml2にも深刻な問題が報告されており、土台ごと見直す流れになっている。WebKitとGeckoも同じ方向を示しているので、Chromeだけの事情ではない。

影響が見えやすいのはサイトマップ

実務で気づきやすいのは、XMLをブラウザで直接開いたときの見え方だろう。WordPressは5.5から標準のXMLサイトマップを持っていて、その出力にXSLのスタイルシートを添えている。おかげでwp-sitemap.xmlを開くとURLの一覧が表形式で表示されるが、XSLTが止まればここは飾りのない生のXMLに戻る。この見た目を作っているXSLはWordPressが動的に出力しているもので、フィルターで内容を差し替えられるようにもなっている。検索エンジンのクローラーはもともとこの処理命令を無視して素のXMLを読んでいるため、インデックスや評価に影響する話ではない。人が目視で中身を確かめるときの見た目だけが変わる。RSSやAtomのフィードを読みやすく整形している場合も事情は同じだ。

移行の道筋もいくつか示されている。変換をサーバー側で済ませてHTMLを返す、データをJSONに寄せて表示はJavaScriptで組み立てる、WebAssemblyで作られたポリフィルを1行足して今の挙動を保つ、といった選択肢だ。フィードについては、XMLへの直リンクを置く代わりにHTML側へ link rel=”alternate” を置くやり方が案内されている。なお、XMLそのものが消えるわけではない。type=”text/css” を指定してCSSで見た目を整える書き方は残るし、ChromeはXMLの解析部分をRustで書かれた実装に差し替える作業も進めている。こちらは開発者から見て違いが出ないようにするという。

自分のサイトで使っているかどうかは、開発者ツールのコンソールに出る非推奨の警告や、Reporting APIを使った検出で確かめられる。企業向けのポリシーやブラウザ拡張で表示を保つ手も残されている。急いで作り直すような話ではないけれど、納品済みのサイトでXMLを直接見せている箇所があるかどうかは、秋が来る前に一度洗い出しておくと落ち着いて手を打てる。

HTMLの冒頭に置く定番タグが少し入れ替わった

つくば市のホームページ制作会社

新しいサイトを組むとき、HTMLの冒頭に置く head の中身は、たいてい前の案件から丸ごと持ってきます。文字コードの宣言、viewport、favicon、OGP。一度決めたら数年は触らない部分です。

そのhead部分の雛形を、ウェブ開発者のManuel Matuzović氏が更新して公開しました。前に同じものを出したのが5年前で、その間にHTMLまわりでいろいろ動きがあったので作り直した、という趣旨です。一行ずつ「なぜ必要か」「必須か任意か」が添えられていて、自分たちのテンプレートと見比べるのにちょうどいい内容でした。

まず変わっていないところ

土台の部分は拍子抜けするほど変わっていません。doctypeは、HTMLが版を切らない仕様になった今も、互換性のために書いておく必要があります。html要素のlang属性は、氏が「HTMLでもっとも重要な属性のひとつ」と書くほど扱いが重く、読み上げソフトの発音から翻訳の判定まで幅広く影響します。日本語サイトならjaと書く、それだけの話ですが、英語圏のテンプレートを借りてきてenのままになっている例は今でも見かけます。

meta charsetをtitleより前に置く、という順番の指定も残っています。後ろに置くとページタイトルの文字が化けることがあるためです。印刷用のスタイルシートをmedia=”print”で読み込ませておく話も健在で、「今でも人はウェブページを印刷する」という理由づけには納得させられました。

減った指定と、増えた指定

viewportの指定は width=device-width だけでよく、長らく定番だった initial-scale=1 はもう要らない、というのが氏の見解です。あれは古い版のiOSやAndroidのために必要だったもので、今の環境では出番がないはずだ、と。ただし「まだ必要な場面があった気がする」という声が時々届くとも書いていて、付けておいても害はない、と結んでいます。この歯切れの悪さはむしろ正直で、好感が持てます。

スクリプトの読み込みは、type=”module” を既定にするよう勧めています。moduleを付けると、文書の解析が終わったあと、DOMContentLoadedが発火する前に実行される形になり、deferに近い挙動が暗黙に入ります。表示を止めてまで先に走らせたい理由がないなら、こちらでいいという整理です。

端末の文字サイズ設定を受け取るmetaタグ

今回いちばん目を引いたのが、text-scale という新しいmetaタグでした。

スマートフォンの設定で文字を大きくしても、ウェブページの文字は大きくならない。この挙動に覚えのある方は多いはずです。実際、ChromeもiOSのブラウザも、OSの文字サイズ設定をウェブの中身には反映していません。AndroidのFirefoxだけは反応しますが、あれは文字だけでなくページ全体を拡大する処理なので、メディアクエリのブレークポイントまで一緒に動いてしまいます。

このタグに scale を指定すると、ルート要素の初期font-sizeが、OSやブラウザの文字サイズ設定に比例して伸び縮みするようになります。効くのはremやemで指定した文字だけで、pxで固定した文字は動きません。MDNの解説では、ルートのfont-sizeを16pxのような絶対値で上書きしないこと、サイズ指定は相対単位かキーワードで書くことが、使用の前提として挙げられています。

ただし現状は実験的な機能で、Baselineには入っていません。そして何より、MDNにも本人のブログにも同じ注意が書かれています。入れる前にテストすること。モバイルには文字サイズを200%から300%以上まで上げる設定があり、そこまで伸ばしても崩れないかを確かめずに入れると、横スクロールが出たり文字が重なったりします。氏自身、自分のサイトで横スクロールが発生したと書いていました。

アイコンまわりは相変わらず手間がかかる

faviconは、icoとsvgの両方をlinkで書いておくのが無難だという話も出てきます。SVGのアイコンを定義すると、ブラウザがサイト直下のfavicon.icoへ自動で戻ってくれなくなり、古い環境ではアイコンが表示されない場合があるためです。SVGにする利点は、拡大しても粗くならないことと、SVGの中にCSSを書けるのでダークモード用の色を持たせられることです。

Androidのホーム画面用にはwebmanifestが要り、丸く切り抜かれる表示に備えたmaskable指定のアイコンでは、絵柄を中央の約80%に収めておく必要があります。theme-colorはSafariの26から扱いが変わり、指定した色ではなく、bodyの背景色や画面上部に固定された要素の色が使われるようになりました。

ひとつひとつは小さな話ですが、この手の雛形は一度作ると数年そのまま動き続けます。地方の制作現場でも、中小企業のサイトほど制作時のテンプレートが何年も引き継がれていきます。新規案件に着手する前に一度だけ見比べておくと、要らない一行を落とし、入れておくべき一行を足すきっかけになるはずです。

Firefoxの新版で並び順と行の余白がCSSから扱える

つくば市のホームページ制作会社

Firefoxの新しい版が8月18日に公開された。目玉機能が一つあるという内容ではなく、これまで制作側が工夫して回避してきた場面に、ブラウザ側の受け皿がいくつか用意されたという性格の更新になっている。派手さはないが、日々の作業で手計算していた部分が減るという意味では効いてくる。

Mozillaが開発者向けに出している変更点の一覧を見ると、CSSとJavaScriptの両方に追加があり、加えて既定では無効のまま入っている実験的な項目もある。実務で関係しそうなところを順に並べてみる。

要素が何番目かをCSSから直接取れる

sibling-index() と sibling-count() という関数が使えるようになった。前者は親要素の中でその要素が何番目かを整数で返し、後者は自分を含めた兄弟要素の総数を返す。番号は1から始まる点が、:nth-child() と同じ考え方になっている。

これまで、リストの並び順に応じて幅や表示の遅れを変えたい場合は、:nth-child() で一件ずつ書き並べるか、テンプレート側から順番を表す変数を各要素に埋め込むのが定番だった。sibling-index() は整数を返すので、calc() の中でそのまま計算に使える。animation-delay を sibling-index() 倍で指定しておけば、項目が増えても減っても順番にずれて現れる。

似た用途の関数に counter() があるが、こちらは文字列を返すため生成コンテンツ向きで、計算には向かない。項目数が運用の中で動く一覧やナビゲーションを抱えている案件では、テンプレート側の小細工を一つ減らせることになる。

書体によってばらつく行の上下を削る

text-box-trim と text-box-edge、そして両者をまとめて書ける text-box が入った。文字の高さは書体ファイルが持つ情報に左右されるため、同じ font-size を指定しても書体が違えば行の箱の高さが変わり、上下の余白が揃わない。この差を吸収するための指定になる。

text-box-trim では削る側を選ぶ。trim-start なら上、trim-end なら下、trim-both で両方、none なら削らない。どこまで削るかは text-box-edge で決める。上を大文字の高さに、下をベースラインに揃える指定にすれば、書体を差し替えても見出しの上下の見え方が安定する。

見出しとその下の本文の間隔を、余白の値を一つずつ詰めて調整していた箇所は多いはずだ。大きな文字を置くヒーロー部分やカードの見出しなど、書体依存で崩れやすいところから恩恵がある。MDNの表示では、この二つの機能はいずれも今年8月から広く使える段階に入ったと案内されている。

繰り返し処理まわりのJavaScriptの追加

イテレータに対して使えるメソッドが四つ増えた。includes() は指定した値が含まれるかを調べ、join() は取り出した要素を区切り文字でつないだ文字列を返す。どちらも配列の同名メソッドと同じ感覚で書けるので、覚え直すことはほとんどない。

chunks() と windows() は、要素をまとまりで取り出すためのものになる。chunks() は指定した個数ずつ連続した配列に区切り、windows() は一つずつずらしながら同じ長さの配列を返す。前者は表示を数件ずつに分けたいとき、後者は隣り合う値を比べたいときに向いている。手で添字を管理していた処理を短く書ける。

既定では切ってあるが用意された指定

設定画面から有効にすると試せる項目もある。接頭辞なしで書ける line-clamp、最小値と最大値の間のどのあたりかを数値として計算できる progress()、text-decoration-inset にパーセントで指定できるようになった件、CSSの値を文字列ではなく型付きのオブジェクトとして扱う仕組みなどが該当する。

このうち line-clamp は、MDNの説明では接頭辞なしの版はまだ広く使える状態ではなく、no-ellipsis と文字列の指定にも未対応とされている。従来の -webkit-line-clamp は表示形式の指定との組み合わせが仕様として定められており、今後も動く。行数で本文を切る処理を、今すぐ書き換える必要はない。

実験段階のものを除けば、並び順を返す関数も行の余白を削る指定も、主要ブラウザが揃った段階に来ている。とはいえ、企業サイトの訪問者には古い環境も混ざる。値が効かなくても崩れない書き方を選んでおけば、対応済みの環境から順に見え方が整っていく形になる。手元の案件で余白を目分量で詰めている箇所があるなら、置き換えの候補として頭の隅に置いておきたい。

部品ごとの表示時刻をブラウザに数えてもらう

つくば市のホームページ制作会社

サイトの速さの話をするとき、話題はどうしてもページ全体の評価に寄っていきます。表示速度の指標が良いか悪いか、という会話は、1枚のページを丸ごと1つの数字にまとめた見方です。ただ、実際に手を動かしていて困るのは、もっと部分的なところではないでしょうか。商品の価格や在庫の表示だけが後から差し替わる、同意バナーが本文より遅れて覆いかぶさる、問い合わせフォームの中身だけがしばらく空白のまま残る。ページ全体としては速いのに、利用者が待っているその一角だけが遅い、という状況です。

この「部品ごとにいつ見えたのか」をブラウザ側で数えてもらう仕組みが、試験提供の段階に入りました。Container Timingと呼ばれるもので、Bloombergが提案し、Igaliaの手でChromiumに実装されたものです。Chromeの開発者向けブログでは、Chrome 148からオリジントライアル、つまり本番のサイトで期間限定で試せる段階に入ったことが案内されています。

ページ全体の指標では届かない場所

いま広く使われている表示速度の指標は、いずれもページを単位にしています。最初に何かが描画された時点、いちばん大きな内容が描画された時点。どちらも利用者の体感を大づかみに表すには便利ですが、面積が大きいことと、その部品が大事であることは別の話です。

商品ページを思い浮かべると、写真、価格と在庫、レビュー、おすすめ商品、決済のウィジェット、同意バナー、外部のチャットといった部品が同居しています。サーバー側で組み立てられるものもあれば、読み込み後にブラウザ側で描かれるもの、外部との通信を待ってから出てくるものもあります。この中で最大の面積を占めるのはたいてい写真ですが、購入の判断を止めているのは価格や在庫の表示だったりします。

さらに、いちばん大きな内容の描画時間は、利用者が操作した時点で計測が打ち切られます。気にしている部品がスクロールやクリックのあとに現れるなら、その部品は指標に載らないまま終わります。実際の訪問者から集めた計測データを扱っている事業者の記事では、同じページ、同じ機種でもこの数値は訪問者ごとに揺れる、と説明されています。画面の広さの違いもありますが、操作で計測が止まることも理由の1つです。

囲んで名前をつけるだけの計測

Container Timingのやることは、拍子抜けするほど単純です。測りたいひとかたまりの外側の要素に containertiming という属性を書き、値として自分でつけた名前を入れる。それだけです。

あとは PerformanceObserver で container という種類の記録を購読すると、その内側に内容が描かれるたびに通知が届きます。届く記録には、自分でつけた名前、最初に描画された時刻、最新の描画の時刻、これまでに描かれた面積の合計、最後に描画のきっかけになった要素などが入っています。描画がコンポジタに渡された時刻と、画面に出た時刻を分けて受け取ることもできます。

逆に、数に入れたくない部分には containertiming-ignore という属性を書きます。同意バナーの中のボタン、読み込み中の骨組み表示、装飾目的の要素、計測のために差し込んだ表示など、数えると面積が水増しされてしまうものを外せます。囲みの中に大きな別部品がある場合、これを外しておくとDOMをたどる処理も軽くなる、という副次的な効きもあるようです。

要素単位の計測と何が違うのか

これまでも elementtiming という属性で、個々の要素の描画時刻を測ることはできました。ただ、これは1つの要素につき1回きりの合図です。ウィジェット全体がいつ揃ったのかを知りたければ、中身の要素すべてに印をつけて回る必要があり、しかも後から差し込まれる要素には印がついていません。自社で書いていない部品には、そもそも手を入れられません。

提案の説明文書では、この不足を埋めるために書かれたJavaScriptの補助実装が引き合いに出されています。描画が始まる前にすべての子要素へ印をつけ、DOMの変化を監視して新しく入ってきた要素にも印をつけ、描かれた矩形を自前で管理する。動きはするものの、そのために描画をせき止めることになり、計測したい速さを計測が損なうという本末転倒に近い形になっていました。この補助実装は現在保守を終えており、正確な値が必要ならブラウザ側の実装を使うよう案内されています。

もう1つの違いは、記録が一度で終わらないことです。ひとかたまりの中身は、文字が先に出て、画像が後から届き、遅れて読み込まれるアイコンがさらに後から乗る、という順に埋まっていきます。そのため記録は候補として複数回届き、どの時点をその部品の揃った時刻と見なすかは書き手が決めます。面積の増加が止まったところを採る、最初の1件だけを採る、利用者の操作が起きるまでを採る。そうした選び方が想定されています。

ブラウザの内側でどう数えているか

実装を担当したIgaliaの技術記事では、既存の仕組みを組み替えて作った経緯が説明されています。Blinkの描画処理には、いちばん大きな内容の描画時間や要素単位の計測のために、文字と画像の描画を検出する部分がすでにあります。新しく描画の追跡を作るのではなく、そこで拾った情報を集約する道を足した、という説明です。

DOMが組み立てられる段階で、containertiming が書かれた要素とその子孫には内部的な目印が立てられます。containertiming-ignore があれば、そこで目印の伝播が止まります。おかげで描画が起きたときに、それが計測対象かどうかを即座に判断でき、対象でない場合の負担はほとんど生じません。対象だった場合は、描かれた要素からDOMを上にたどり、印のついた祖先へ報告が上がっていきます。

面積の集計には、描かれた矩形を重複なく足し合わせる領域計算が使われています。Skiaの領域オブジェクトを流用して、新しい描画のたびに既存の領域との和を取る形です。面積が増えない描画は記録として送られないので、通知の数も抑えられます。計測そのものが重くなっては意味がない、という割り切りが、この辺りの設計に表れているように見えます。

現時点の制約もはっきり書かれています。追跡できるのは文字と画像の描画で、動画やcanvas、SVGはまだ対象外です。Shadow DOMの扱いも初版では見送られており、要素単位の計測での方針が固まってからの検討とされています。深い階層を上にたどる処理の重さも、今後の最適化課題として挙げられています。

どこに印をつけると意味があるか

あらゆる部品に印をつけて回るのは、おそらく得策ではありません。実際の訪問者から計測データを集めている事業者の記事では、利用者の目に入り、かつ商売として意味のある部分から始めるのがよい、という考え方が示されています。売上や離脱に効く場所、先に進めなくなる場所、遅いと苦情の原因になる場所です。

具体例として挙がっているのは、冒頭の主役となる領域、商品のバリエーション選択、購入内容の確認、検索結果の一覧、同意バナー、外部から読み込まれるウィジェットあたりです。とくに同意バナーは、外部の仕組みがブラウザ側で組み立てることが多く、画像も見出しも持たない作りだと要素単位の計測では捉えにくいという事情があります。画面を覆って操作を止めるものなのに、既存の指標には載りにくいわけです。

地方の中小企業のサイトに置き換えるなら、規模は小さくても構図は同じです。トップの主役画像、料金表、予約や問い合わせのフォーム、地図の埋め込み、外部のカレンダー。このうちどれかが遅れて出てくることに心当たりがあるなら、名前をつけて測ってみる価値があります。名前は人間が読んで分かるもので、かつ商品IDのように変動する値は避けるべきだ、とも助言されています。集計したときに散らばってしまうからです。

注意したい点もいくつかあります。印は描画より前に存在していなければならず、後からJavaScriptで属性を足すと、それまでの描画は取りこぼされます。画面の外にある部分は記録されず、後からスクロールして見えても新しい記録が出るとは限らないので、表示領域に入ったかどうかを知る仕組みの代わりにはなりません。読み込み中の骨組み表示を囲みの中に入れたままにすると、その骨組みも描画として数えられます。最終的な中身の側に印をつけ直すか、骨組みを除外するか、集め方を調整するかの判断が要ります。

試験提供という段階の受け止め方

オリジントライアルはChrome 148から始まり、153までの期間が示されています。手元で試すだけなら実験的なウェブプラットフォーム機能の設定を有効にすれば足りますが、実際の訪問者から値を集めたい場合は、サイトごとに発行されるトークンをページに埋め込む必要があります。

このトークンの置き方には、先行して試した事業者がつまずいた落とし穴が紹介されています。ふつうは、機能を使うJavaScriptより前にトークンが読まれていれば動きます。ところがContainer Timingでは、属性そのものも試験提供の対象です。つまりブラウザが最初の containertiming 属性に出くわす前にトークンが読まれている必要があり、計測用スクリプトを描画の妨げにならない形で読み込んでいると間に合いません。結局、サイト側で自分のトークンを登録してもらって初めて値が集まり始めた、という顛末が書かれています。

集めた数値の読み方にも工夫が要ります。ある部品の描画時刻をそのまま見ると、ページ全体の遅れを丸ごとかぶった値になります。たとえば表示の切り替えのために本文全体を数秒隠す仕掛けが入っていれば、その裏で待たされた部品の時刻もそろって遅くなる。それをその部品のせいだと読むのは無理があります。そのため、最初に何かが描画された時刻を引いて差分で見る、という扱い方が採られています。ページが出始めてから、その部品が出るまでに何秒余計にかかったのか。こちらのほうが、直す場所を決めるには役に立ちます。

仕様はまだ動く可能性があり、項目名や細かい挙動が変わることも十分あります。集めた値も、当面は長く追いかける指標ではなく、早い段階の観測データとして扱うのが無難でしょう。それでもこの手の話は、標準になってから慌てて追いかけるより、試験提供のうちに1つか2つ印をつけて眺めておくほうが、広く使えるようになったときの動きが速くなります。属性を書き足すだけで始められるのは、入り口としてはかなり低いほうだと思います。

投稿の編集画面がiframeに一本化された

つくば市のホームページ制作会社

WordPress 7.1 が8月19日に公開され、投稿の編集画面まわりに地味ながら影響範囲の広い変更が入った。投稿エディタが、条件にかかわらず常に iframe の中で動くようになったことだ。画面の見た目はほとんど変わらないので気づきにくいが、ブロックを拡張するプラグインや自作ブロックを抱えているサイトでは挙動が変わる可能性がある。

これまでは記事の中身しだいで切り替わっていた

WordPress はここ数年、編集画面を少しずつ iframe の中へ移してきた。最初に移ったのはテンプレートエディタで、5.8 のときだった。その後サイトエディタや端末別のプレビューも常時 iframe 化され、最後まで残っていたのが投稿の編集画面だった。

7.0 の時点では、投稿に挿入されているブロックのブロック API のバージョンを見て判断していた。挿入済みのブロックがすべて API バージョン3以上なら iframe 化し、それより古いブロックがひとつでも混ざっていれば互換性を優先して iframe をやめる、という仕組みだ。つまり同じサイトの中でも、記事の中身によって編集画面の作りが変わっていたことになる。

7.1 からはこの条件分岐がなくなった。テーマの種類にも、登録されているブロックの API バージョンにも、本文に入っているブロックにも関係なく、投稿の編集画面は常に iframe になる。従来ながらのメタボックスを登録しているサイトも対象に含まれる。

切り離すことで何が変わるのか

iframe は別の HTML 文書を画面の中に読み込む仕組みで、中と外でスタイルの適用範囲が分かれる。編集画面を iframe に入れると、管理画面側の CSS が本文の表示に混ざり込まなくなる。ビューポート単位やメディアクエリも、ブラウザのウィンドウ幅ではなく編集領域そのものの幅を基準に効くようになる。

編集画面の見た目と公開後の見た目をそろえるという点では、筋のいい方向だと思う。7.1 ではタブレットとモバイルの表示を theme.json 側から指定できる仕組みも入っており、幅の判定基準をはっきりさせる必要はもともと高まっていた。条件によって iframe になったりならなかったりする状態のままでは、同じテーマでも記事ごとに確認結果が変わりかねない。

つまずくとしたら document と window のあたり

公式の開発者向け案内によると、ほとんどのブロックは手を入れなくても iframe 化された編集画面で動くとされている。問題が出る場合も、原因はだいたい同じところに行き着くという。iframe は自前の document と window を持っており、編集画面のスクリプトが動いている管理画面側とは別物だ、という点だ。

グローバルな document や window をそのまま参照して編集領域の要素を触っているコードは、意図しない側の文書を見に行ってしまう。対処としては、編集領域の中にある要素から ownerDocument とその defaultView をたどって正しい文書を取得する方法と、イベントリスナーの登録と解除を useRefEffect で行う方法が案内されている。自作ブロックやエディタ拡張を納品している制作者なら、更新前に手元の環境で開いて確かめておきたいところだ。

なお Gutenberg プラグインでは 22.6 以降、プラグインが有効な環境では投稿エディタを強制的に iframe 化する挙動が先行して入っていた。互換性の問題を早めに表面化させ、コアに入る前に報告してもらうためだという。プラグイン版を入れて運用していたサイトは、すでにこの状態を通ってきていることになる。

一覧画面の行見出しも入れ替わっている

同じ 7.1 では、投稿一覧の表の組み立ても変わった。行の見出しを担う、scope 属性が row の th 要素が、チェックボックスの列からタイトルの列へ移っている。チェックボックスのセルは td になり、タイトルのセルが th になって、投稿タイトルを aria-label として持つ形になった。

読み上げソフトが各行をチェックボックスではなく投稿名で認識できるようになるので、アクセシビリティの面では順当な改善だ。ただしこのあたりの markup は2010年ごろからほとんど動いていなかった部分で、一覧画面に独自の列を足すプラグインや、管理画面向けに書いた CSS が暗黙のうちに依存している場合がある。チェックボックス列のクラスを狙っているセレクタや、投稿タイトルが td の中にある前提で書いた JavaScript があれば、更新後に一度見ておくと安心だ。

中小企業のサイト運用では、編集画面まわりの変更は不具合として上がってくるより先に、なんとなく使いにくくなったという曖昧な形で相談が来ることが多い。更新後に自分で新規投稿を一本開いて、普段使っているブロックとプラグインがいつもどおり動くかを確かめておく。それだけで、たいていの不安は先回りして片付けられる。

横に長い表で見出しを固定しやすくなるCSSの指定

つくば市のホームページ制作会社

横に長い表を作るとき、見出し行や左端の項目名をどう固定するかで手が止まった経験は多いと思う。Chromeの開発者向けブログに8月20日付で公開された次期版の先行情報によると、その悩みに直接効く変更がブラウザに入る。overflowプロパティで縦と横に別々の値を組み合わせられるようになるというもので、たとえば横はスクロールさせ、縦は切り取り(clip)にする、という書き分けが指定どおりに扱われる。ひとつの軸だけがスクロールする箱、という考え方をCSSの側で素直に表せるようになる。まだ先行版の段階なので、正式版で使えるようになるのはもう少し先になる。

これまでのCSSは、片方の軸にスクロール系の値を指定すると、もう片方も実質的にスクロール可能な箱として扱っていた。clipと書いても内部的にはhiddenへ変換されるため、その中でposition: stickyを使った要素は、思っていたのとは別の箱を基準にして固定される。表の上端と左端の両方を固定したかったのに片方しか張り付かない、という現象の正体はここにあった。公開されている提案文書でも、この扱いが出発点の課題として説明されている。スクロールのたびに位置を計算しなおす回避策もあったが、電池を消費し、保守も面倒で、スクロールが非同期である以上ぴったり合わせるのは難しかったとされている。

表とカルーセルで違いが出る

提案文書が挙げている例は二つある。ひとつは、上に見出し、左に項目名を並べた表を、スマートフォンから縦にも横にも動かして読む場面。表を包む要素にoverflow: scroll clipを書いておけば、どちらのラベルも見えたまま奥まで読み進められる。もうひとつは横並びのカルーセルで、縦方向は見た目の上で隠してあっても、スクリプトからscrollIntoViewを呼んだ拍子に縦へずれてしまうことがある。hiddenは利用者が触れないだけで、スクリプトからは動かせるためだ。しかも利用者の側は手で戻せないので、ずれたままになる。clipを指定した軸は動かないと決められる、という整理になっている。

気をつけたいのは互換性で、以前はoverflow: scroll clipと書いてもscroll hiddenとして解釈されていた。古いコードにこの書き方が残っているサイトでは、見え方が変わる可能性がある。同じ先行版には、斜めに動かしたいのにブラウザが勝手に一方向へ寄せてしまうのを止めるscroll-axis-lockという指定も入っており、スクロールまわりの細かい要望が続けて拾われている印象がある。料金表や仕様一覧のように横へ広がる表は、中小企業のサイトでも珍しくない。JavaScriptで位置を合わせていた部分をそのまま減らせる場面は出てくるはずなので、正式版に降りてくる時期を見ながら、手元の表がどの箱に閉じ込められているかを一度確かめておきたい。

プラグインを配る側に求められる脆弱性報告の手順

つくば市のホームページ制作会社

プラグインやテーマは「使うもの」で、「作って配るもの」ではない。制作の現場ではそういう感覚が普通かもしれません。ただ、案件ごとに小さな自作プラグインを納品したり、テーマを配ったりしている会社は少なくないはずです。欧州連合で動き始めた新しい規則は、そうした立場の人にも関わってきます。

Cyber Resilience Act(サイバーレジリエンス法、CRA)という規則です。欧州委員会の説明によると、2024年12月10日に発効し、主な義務は2027年12月11日から適用されます。そして脆弱性などの報告義務については、それより早い2026年9月11日から適用が始まります。先に動き出すのは報告の部分だ、という順番になっています。

先に始まるのは報告のほう

CRAは、ネットワークにつながるハードウェアとソフトウェア全般を対象に、計画・設計・開発・保守の各段階で安全性を確保することを製造者に求める規則です。欧州委員会は、製品を出したら終わりではなく、製品の寿命が続くあいだ脆弱性を扱い続けることも要件に含まれると説明しています。要件を満たした製品にはCEマークが付き、各国の市場監視当局が運用を見ます。

先行して適用される報告義務は、悪用が確認されている脆弱性や重大なインシデントを、決められた期限内に当局へ知らせるというものです。欧州委員会は2026年7月27日に、規模を問わず事業者が義務を果たせるようにするための実務的な手引きを公開しています。読む側にとっては、9月の適用開始前に手順を確かめておくための材料ということになります。

WordPressの世界ではだれが対象になるのか

WordPressサイトの保守サービスを手がけるWP Umbrellaの解説によると、プラグイン作者はCRAの文脈では製造者にあたります。有料版がある、データを扱っている、会社として保守している。そうした商業的な意図があれば、無料で配っていても対象になり得るという整理です。オープンソースだから関係ない、とは言い切れないわけです。

同じ解説は、コードを書かない制作会社も無関係ではないとしています。第三者のプラグインを選んで納品する立場は流通側にあたり、使っている部品の一覧(SBOM、ソフトウェア部品表)がどこにあるか、セキュリティ更新がどう配られているかを把握しておくことが期待されます。EU向けの案件に自作モジュールを納めていれば、それは自社が作った製品という扱いです。

もっとも、WordPressの構造には難しさもあります。WordPress.orgから配布したプラグインの場合、作者は誰が使っているかを知りません。それでも利用者への通知が求められる、という食い違いが残っている。この点は個々の作者が解決できる話ではなく、配布側の仕組みが変わっていく必要がある、というのが同解説の見立てです。

技術的な中身はまだ標準づくりの途中

Help Net Securityが2026年8月14日に伝えたところでは、CRAの技術的な詳細を埋める17本の標準の草案が、いま意見募集にかけられています。法律は「何を達成すべきか」を定めるだけで「どうやるか」までは書かないため、標準化団体がその部分を担う。CRAを担当する部会の議長は、そうした役割分担だと述べています。

示された草案に沿って作れば適合しているとみなされる仕組みで、今回の対象はパスワード管理ソフトやウイルス対策ソフト、スマートホーム機器、つながる玩具など、リスクが高いとされる区分です。意見を出せるのは欧州経済領域の標準化機関を含む41の加盟組織と、消費者や中小企業の立場を代表する四つの団体で、締め切りは分野ごとに9月半ばから11月半ばの間に置かれています。文言がまだ動くうちに意見が入る、という段取りです。

制作の現場で先にできること

日本の制作会社が明日から欧州の当局に何かを届け出る、という話ではありません。ただ、CRAが求めている作業の中身は、EU向けかどうかに関係なく手元の運用を整えるものでもあります。変更履歴を残す。更新にセキュリティ修正が含まれるときはそれとわかるように書く。脆弱性の連絡先をひとつ決めて公開しておく。可能なら機能追加とセキュリティ修正を分けて出す。WP Umbrellaの解説が挙げているのは、そうした地味な項目です。

保守を請け負っている場合は、どのサイトにどのプラグインが入っていて、いつ更新したかを追える状態にしておくことが効いてきます。何年も更新の止まったプラグインを使い続けている案件があれば、そこは規則以前の問題として見直しどころです。欧州の規則という遠い話に見えて、点検の項目自体は、いま抱えている保守案件にそのまま当てはまります。

ルビや余白の指定がSafariの先行版に増えた

つくば市のホームページ制作会社

WebKitが公開しているSafari Technology Previewの最新版に、文字の見え方を細かく決めるCSSの追加がまとまって並んでいた。先行版のリリースノートは地味な項目の羅列になりがちだが、今回は日本語の組版に直接関わるものが混じっていて目に留まった。正式版に入る前の段階とはいえ、どこへ向かっているかは読み取れる。

ひとつはルビの張り出しを扱う ruby-overhang というプロパティだ。ルビは親文字より横に長くなることがあり、既定でははみ出した分が隣の文字に少しかぶる。指定できる値はこれまで、ブラウザの判断に任せる auto と、はみ出しを一切許さない none の二つだった。リリースノートによると、ここに spaces という値のサポートが加わり、張り出してよい相手を隣り合う空白や約物に限る、という中間的な指定ができるようになった。none は spaces の別名という扱いに変わっている。MDNのリファレンスでも、このプロパティの形式的な構文はすでに auto と spaces の二つで書かれていて、仕様側で進んでいた整理が実装に降りてきた形になる。

あわせて white-space-trim も入った。これは white-space を構成するプロパティのひとつで、要素の前後や内側に残る空白を捨てるかどうかを指定する。値は discard-before、discard-after、discard-inner を組み合わせて使う。テンプレートの改行やインデントがそのまま余白として出てしまう場面を、HTMLの書き方を詰めて回避するのではなく、CSS側で処理できるようにするものだ。MDNの white-space のページには、この構成プロパティはまだどのブラウザにも実装されていない、という注記が残っている。先行版に限った話とはいえ、実装が一つ出てきたことになる。

ほかにも、下線の位置をずらせる text-decoration-inset、箇条書きの記号そのものに content を指定できるようになった ::marker、要素の内側での折り返し方を扱う wrap-inside が並んでいる。修正の側にも、::selection に指定した text-decoration が描画されない問題や、直交する書字方向の子要素を持つブロックの幅がつぶれる問題が挙がっている。どれも派手さはないが、縦組みや細かな文字詰めを一度でも触ったことがあれば思い当たる類の話だ。

いま使うというより、頭の隅に置く段階

ここで挙げたものはSafariの先行版に入った段階で、正式版や他のブラウザで使えるかどうかはこれからの話になる。中小企業のサイトで来週から使う、という性質のものではない。ただ、ルビや余白の詰めは、これまで全角スペースの調整やJavaScriptでしのいできた領域でもある。ブラウザ側で素直に扱える方向へ仕様が動いていることを知っておくと、次に組版で困ったときに探す場所が一つ増える。リリースノートは項目ごとに短くまとまっているので、気になる分野だけ拾い読みしておくのでも十分だろう。