以下の手順を作業用チェックリストとして使い、プロジェクトで確認できた根拠、対象範囲、制約に合わせて調整してください。
実務的な手順
- 確認対象のページとブラウザーの開発者コンソールを開きます。モバイルのはみ出し確認では、先にレスポンシブモードにします。
- コードを確認し、スクリプト全体をコンソールへ貼り付けてEnterを押します。現在のページを読み取ります。サイトマップメタデータツールと同一オリジンのチェッカーだけが、回数を制限してリクエストを送ります。
- コンソールの出力またはダウンロードしたCSV/JSONを確認します。ブラウザーのポリシー、認証状態、未対応のサーバーメソッドによって、判定できない項目が残る場合があります。
(() => {
const meta = (name, attr = 'name') => document.querySelector('meta[' + attr + '="' + name + '"]')?.content || '';
const links = (rel) => [...document.querySelectorAll('link[rel="' + rel + '"]')].map((node) => ({ href: node.href, hreflang: node.hreflang || '' }));
const report = {
url: location.href,
title: document.title,
titleLength: document.title.length,
description: meta('description'),
descriptionLength: meta('description').length,
robots: meta('robots'),
canonical: links('canonical')[0]?.href || '',
language: document.documentElement.lang || '',
headings: Object.fromEntries([1, 2, 3, 4, 5, 6].map((level) => ['h' + level, [...document.querySelectorAll('h' + level)].map((node) => node.innerText.trim()).filter(Boolean)])),
hreflang: links('alternate').filter((item) => item.hreflang),
openGraph: Object.fromEntries([...document.querySelectorAll('meta[property^="og:"]')].map((node) => [node.getAttribute('property'), node.content])),
twitter: Object.fromEntries([...document.querySelectorAll('meta[name^="twitter:"]')].map((node) => [node.name, node.content])),
jsonLdBlocks: document.querySelectorAll('script[type="application/ld+json"]').length,
};
console.table({ title: report.title, titleLength: report.titleLength, descriptionLength: report.descriptionLength, robots: report.robots, canonical: report.canonical, language: report.language, h1Count: report.headings.h1.length, hreflangCount: report.hreflang.length, jsonLdBlocks: report.jsonLdBlocks });
console.log('Full SEO page report:', report);
const link = document.createElement('a');
link.href = URL.createObjectURL(new Blob([JSON.stringify(report, null, 2)], { type: 'application/json' }));
link.download = 'seo-page-audit.json';
link.click();
setTimeout(() => URL.revokeObjectURL(link.href), 1000);
})();実行前に内容を確認してください。このスクリプトは現在のページを読み取ります。リクエストを送るのはサイトマップとリンクの監査だけで、回数は制限されています。cookieは送信せず、サイトの内容も変更しません。