現在の位置: ホーム> 最新記事一覧> get_meta_tagsを使用する場合、よくある質問とソリューション

get_meta_tagsを使用する場合、よくある質問とソリューション

gitbox 2025-09-16

get_meta_tags()は、 <meta name = "...">リモートまたはローカルHTMLファイルからのタグのコンテンツを抽出するためのPHPに組み込まれた便利な機能です。多くの場合、ページのキーワードや説明をクロールするために使用されます。ただし、実際に使用すると、開発者はさまざまな問題に遭遇します。タイトルは抽出できず、キーワードは空で、文字エンコードが正しくなく、リモートリクエストが失敗し、メタタグライティング方法は標準化されていません。


1. get_meta_tags()の方法と制限(最初に理解してからデバッグ)

  • get_meta_tags(string $ filename、bool $ use_include_path = false) :ファイルを読み取り、 <meta name = "xxx" content = "yyy">解析しようとします。

  • <title>タグコンテンツ(つまり、ページタイトル)も取得しません。また、 <meta property = "og:...">または<meta charset = "...">などの非名前属性を持つメタも取得しません。

  • HTMLの要件は比較的厳格です。METAはname = "..."およびcontent = "..."の形式で存在する必要があり、属性またはラインブレークの順序は、ペーシングに影響を与えることがあります。

結論:ページ<title>またはMetaがプロパティ(オープングラフなど)を使用する必要がある場合、 get_meta_tags()では単独で使用するには十分ではありません。


2。FAQとソリューションのリスト

質問A: <title>を取得できません(ページタイトル)

原因get_meta_tags()<title>を解決しません。
解決策domdocumentまたは通常(推奨されない)を使用して、 <title>を解析します。例(推奨domdocument ):

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">fetch_title</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$html</span></span></span><span>) {
    </span><span><span class="hljs-variable">$dom</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DOMDocument</span></span><span>();
    </span><span><span class="hljs-comment">// suppress warnings for malformed HTML</span></span><span>
    @</span><span><span class="hljs-variable">$dom</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">loadHTML</span></span><span>(</span><span><span class="hljs-variable">$html</span></span><span>, LIBXML_NOWARNING | LIBXML_NOERROR);
    </span><span><span class="hljs-variable">$nodes</span></span><span> = </span><span><span class="hljs-variable">$dom</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getElementsByTagName</span></span><span>(</span><span><span class="hljs-string">'title'</span></span><span>);
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$nodes</span></span><span>-&gt;length ? </span><span><span class="hljs-title function_ invoke__">trim</span></span><span>(</span><span><span class="hljs-variable">$nodes</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">item</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>)-&gt;textContent) : </span><span><span class="hljs-literal">null</span></span><span>;
}
</span></span>

ページコンテンツをリモートで取得する必要がある場合は、最初にfile_get_contents / curlでHTMLを引き下げてから、 fetch_title()に渡してください。


質問B: get_meta_tags()空の配列を返すか、いくつかのメタがありません

考えられる理由

  1. htmlメタはname = "..." + content = "..."property = "og:..."またはhttp-equivなど)で記述されていません。

  2. メタは<head>外にあります(またはページ構造は標準化されていません)。

  3. 文字エンコードまたはBOMは、解析を失敗させます。

  4. Allow_url_fopenは無効であり、URLを使用できません。

解決

  • メタ属性のタイプを確認し、 DomDocumentを使用して、必要に応じてMeta-> getAttribute( 'name')およびMeta-> getattribute( 'Property')を確認します。

  • リモートURLの場合、 Curlを使用して最初にページコンテンツを取得し(より柔軟に)、DOMを使用して解析します。

  • Allow_url_fopenが無効になっている場合は、代わりにCurlを使用します。

例: CURL + DOMを使用して、一般的なメタ(名前プロパティを含む)とタイトルを抽出します。

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">fetch_html</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$url</span></span></span><span>, </span><span><span class="hljs-variable">$timeout</span></span><span> = </span><span><span class="hljs-number">10</span></span><span>) {
    </span><span><span class="hljs-variable">$ch</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_init</span></span><span>(</span><span><span class="hljs-variable">$url</span></span><span>);
    </span><span><span class="hljs-title function_ invoke__">curl_setopt_array</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>, [
        CURLOPT_RETURNTRANSFER =&gt; </span><span><span class="hljs-literal">true</span></span><span>,
        CURLOPT_FOLLOWLOCATION =&gt; </span><span><span class="hljs-literal">true</span></span><span>,
        CURLOPT_MAXREDIRS =&gt; </span><span><span class="hljs-number">5</span></span><span>,
        CURLOPT_CONNECTTIMEOUT =&gt; </span><span><span class="hljs-variable">$timeout</span></span><span>,
        CURLOPT_TIMEOUT =&gt; </span><span><span class="hljs-variable">$timeout</span></span><span>,
        CURLOPT_USERAGENT =&gt; </span><span><span class="hljs-string">'Mozilla/5.0 (compatible; PHP script)'</span></span><span>,
    ]);
    </span><span><span class="hljs-variable">$html</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_exec</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>);
    </span><span><span class="hljs-variable">$err</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_error</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>);
    </span><span><span class="hljs-title function_ invoke__">curl_close</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>);
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$html</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
        </span><span><span class="hljs-keyword">throw</span></span><span> </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-built_in">RuntimeException</span></span><span>(</span><span><span class="hljs-string">"Failed to fetch URL: <span class="hljs-subst">$err</span></span></span><span>");
    }
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$html</span></span><span>;
}

</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">parse_meta_and_title</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$html</span></span></span><span>) {
    </span><span><span class="hljs-variable">$dom</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DOMDocument</span></span><span>();
    @</span><span><span class="hljs-variable">$dom</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">loadHTML</span></span><span>(</span><span><span class="hljs-variable">$html</span></span><span>, LIBXML_NOWARNING | LIBXML_NOERROR);
    </span><span><span class="hljs-variable">$result</span></span><span> = [</span><span><span class="hljs-string">'title'</span></span><span> =&gt; </span><span><span class="hljs-literal">null</span></span><span>, </span><span><span class="hljs-string">'meta'</span></span><span> =&gt; []];

    </span><span><span class="hljs-comment">// title</span></span><span>
    </span><span><span class="hljs-variable">$titles</span></span><span> = </span><span><span class="hljs-variable">$dom</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getElementsByTagName</span></span><span>(</span><span><span class="hljs-string">'title'</span></span><span>);
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$titles</span></span><span>-&gt;length) {
        </span><span><span class="hljs-variable">$result</span></span><span>[</span><span><span class="hljs-string">'title'</span></span><span>] = </span><span><span class="hljs-title function_ invoke__">trim</span></span><span>(</span><span><span class="hljs-variable">$titles</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">item</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>)-&gt;textContent);
    }

    </span><span><span class="hljs-comment">// metas</span></span><span>
    </span><span><span class="hljs-variable">$metas</span></span><span> = </span><span><span class="hljs-variable">$dom</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getElementsByTagName</span></span><span>(</span><span><span class="hljs-string">'meta'</span></span><span>);
    </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$metas</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$meta</span></span><span>) {
        </span><span><span class="hljs-variable">$name</span></span><span> = </span><span><span class="hljs-variable">$meta</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getAttribute</span></span><span>(</span><span><span class="hljs-string">'name'</span></span><span>);
        </span><span><span class="hljs-variable">$prop</span></span><span> = </span><span><span class="hljs-variable">$meta</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getAttribute</span></span><span>(</span><span><span class="hljs-string">'property'</span></span><span>); </span><span><span class="hljs-comment">// og: 待って</span></span><span>
        </span><span><span class="hljs-variable">$http_equiv</span></span><span> = </span><span><span class="hljs-variable">$meta</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getAttribute</span></span><span>(</span><span><span class="hljs-string">'http-equiv'</span></span><span>);
        </span><span><span class="hljs-variable">$content</span></span><span> = </span><span><span class="hljs-variable">$meta</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getAttribute</span></span><span>(</span><span><span class="hljs-string">'content'</span></span><span>);

        </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$name</span></span><span>) {
            </span><span><span class="hljs-variable">$result</span></span><span>[</span><span><span class="hljs-string">'meta'</span></span><span>][</span><span><span class="hljs-title function_ invoke__">strtolower</span></span><span>(</span><span><span class="hljs-variable">$name</span></span><span>)] = </span><span><span class="hljs-variable">$content</span></span><span>;
        } </span><span><span class="hljs-keyword">elseif</span></span><span> (</span><span><span class="hljs-variable">$prop</span></span><span>) {
            </span><span><span class="hljs-variable">$result</span></span><span>[</span><span><span class="hljs-string">'meta'</span></span><span>][</span><span><span class="hljs-title function_ invoke__">strtolower</span></span><span>(</span><span><span class="hljs-variable">$prop</span></span><span>)] = </span><span><span class="hljs-variable">$content</span></span><span>;
        } </span><span><span class="hljs-keyword">elseif</span></span><span> (</span><span><span class="hljs-variable">$http_equiv</span></span><span>) {
            </span><span><span class="hljs-variable">$result</span></span><span>[</span><span><span class="hljs-string">'meta'</span></span><span>][</span><span><span class="hljs-title function_ invoke__">strtolower</span></span><span>(</span><span><span class="hljs-variable">$http_equiv</span></span><span>)] = </span><span><span class="hljs-variable">$content</span></span><span>;
        }
    }
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>;
}
</span></span>

質問C:文字エンコード(中国語およびその他の複数のバイト)文字化けコード

理由

  • ページで使用されるエンコード(UTF-8、GBKなど)は、domdocument :: loadhtmlのデフォルトの動作と一致しません。

  • HTTPヘッダーは、Page MetaのCharset情報と矛盾しています。

解決

  • loadhtml()およびinject <meta http-equiv = "content-type" content = "text/html; charset = utf-8"> domdocumentを認識しやすくする前に、HTMLをUTF-8(そうでない場合)に変換して<meta http-equiv = "content-type" content = "text = utf-8">変換します。

  • MB_DETECT_ENCODING()を使用して、エンコードを決定し、UTF-8に変換します。

例:

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">normalize_to_utf8</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$html</span></span></span><span>) {
    </span><span><span class="hljs-comment">// 合格してみてください BOM または meta 裁判官エンコーディング,わからない場合は、使用してください mb_detect_encoding</span></span><span>
    </span><span><span class="hljs-variable">$encoding</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">preg_match</span></span><span>(</span><span><span class="hljs-string">'/&lt;meta.+?charset=["\']?\s*([a-zA-Z0-9\-\_]+)\b/i'</span></span><span>, </span><span><span class="hljs-variable">$html</span></span><span>, </span><span><span class="hljs-variable">$m</span></span><span>)) {
        </span><span><span class="hljs-variable">$encoding</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strtoupper</span></span><span>(</span><span><span class="hljs-variable">$m</span></span><span>[</span><span><span class="hljs-number">1</span></span><span>]);
    }
    </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$encoding</span></span><span>) {
        </span><span><span class="hljs-variable">$encoding</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_detect_encoding</span></span><span>(</span><span><span class="hljs-variable">$html</span></span><span>, [</span><span><span class="hljs-string">'UTF-8'</span></span><span>,</span><span><span class="hljs-string">'GB2312'</span></span><span>,</span><span><span class="hljs-string">'GBK'</span></span><span>,</span><span><span class="hljs-string">'ISO-8859-1'</span></span><span>], </span><span><span class="hljs-literal">true</span></span><span>);
    }
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$encoding</span></span><span> &amp;&amp; </span><span><span class="hljs-title function_ invoke__">strtoupper</span></span><span>(</span><span><span class="hljs-variable">$encoding</span></span><span>) !== </span><span><span class="hljs-string">'UTF-8'</span></span><span>) {
        </span><span><span class="hljs-variable">$html</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_convert_encoding</span></span><span>(</span><span><span class="hljs-variable">$html</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
    }
    </span><span><span class="hljs-comment">// 確保する loadHTML asを識別します UTF-8</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">stripos</span></span><span>(</span><span><span class="hljs-variable">$html</span></span><span>, </span><span><span class="hljs-string">'&lt;meta http-equiv="Content-Type"'</span></span><span>) === </span><span><span class="hljs-literal">false</span></span><span>) {
        </span><span><span class="hljs-variable">$html</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/&lt;head([^&gt;]*)&gt;/i'</span></span><span>, </span><span><span class="hljs-string">'&lt;head$1&gt;&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;'</span></span><span>, </span><span><span class="hljs-variable">$html</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>);
    }
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$html</span></span><span>;
}
</span></span>

質問D: get_meta_tags()はHTMLコメントまたは不規則な形式に敏感です

原因:この関数は内部的に単純なパーサーに基づいており、コンテンツプロパティのNewLines、コメント、またはNest Strangeキャラクターに遭遇することに失敗します。
解決策domdocumentを使用した障害に耐える方が適切です。または、最初にHTMLのヘッドを前処理し(コメントを削除し、属性を同じ行に平らにします)、 get_meta_tags()を呼び出します(あまりエレガントではありませんが、短期的な救済策として使用できます)。


質問E:リモートページをクロールするタイミング、逆転、または403/429に戻る

対策

  • curlopt_useragentを使用して、共通ブラウザーUAをセットアップします。

  • 合理的なcurlopt_timeoutcurlopt_connecttimeoutを設定します。

  • curlopt_followlocationをサポートします(一部の環境で有効にする必要があることに注意してください)。

  • サイトにアンチクロール戦略(検証コード、JSレンダリング、アンチロボット)がある場合は、次のことを検討してください。

    • 簡単なリクエストヘッダー変装(ただし、法律およびウェブサイトロボット契約に準拠しています)。

    • JS(ヘッドレスブラウザなど)のクローラーを使用しますが、これはPHPネイティブスコープを超えています。

  • HTTPステータスコードを処理し、失敗時に再試行します(運動中のフォールバック)が、過度のリクエストは避けてください。

例:ヘッダー付きのカール:

 <span><span><span class="hljs-title function_ invoke__">curl_setopt_array</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>, [
    CURLOPT_RETURNTRANSFER =&gt; </span><span><span class="hljs-literal">true</span></span><span>,
    CURLOPT_FOLLOWLOCATION =&gt; </span><span><span class="hljs-literal">true</span></span><span>,
    CURLOPT_MAXREDIRS =&gt; </span><span><span class="hljs-number">5</span></span><span>,
    CURLOPT_CONNECTTIMEOUT =&gt; </span><span><span class="hljs-number">10</span></span><span>,
    CURLOPT_TIMEOUT =&gt; </span><span><span class="hljs-number">15</span></span><span>,
    CURLOPT_USERAGENT =&gt; </span><span><span class="hljs-string">'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'</span></span><span>,
    CURLOPT_HTTPHEADER =&gt; [
        </span><span><span class="hljs-string">'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'</span></span><span>,
        </span><span><span class="hljs-string">'Accept-Language: en-US,en;q=0.5'</span></span><span>,
    ],
]);
</span></span>

質問F: get_meta_tags()は、小文字のキー名のみを返します

これは関数の設計です。キー名は小文字に変換されます。あなたのビジネスがケースに敏感な分野に依存している場合、標準化されたキー名に注意してください。


3.推奨される堅牢な実装(タイトル、キーワード、説明、OGタグの統一された取得)

組み合わせ関数は次のとおりです。最初にCurlを使用してHTMLを取得し、次に正規化をエンコードし、最後にDOMを使用して共通フィールドとすべてのメタリストを解析および返すことです。

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">fetch_page_info</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$url</span></span></span><span>) {
    </span><span><span class="hljs-variable">$html</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fetch_html</span></span><span>(</span><span><span class="hljs-variable">$url</span></span><span>);
    </span><span><span class="hljs-variable">$html</span></span><span> = </span><span><span class="hljs-title function_ invoke__">normalize_to_utf8</span></span><span>(</span><span><span class="hljs-variable">$html</span></span><span>);
    </span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">parse_meta_and_title</span></span><span>(</span><span><span class="hljs-variable">$html</span></span><span>);

    </span><span><span class="hljs-comment">// 一般的なフィールドの正規化:title, keywords, description</span></span><span>
    </span><span><span class="hljs-variable">$info</span></span><span> = [];
    </span><span><span class="hljs-variable">$info</span></span><span>[</span><span><span class="hljs-string">'title'</span></span><span>] = </span><span><span class="hljs-variable">$data</span></span><span>[</span><span><span class="hljs-string">'title'</span></span><span>] ?? </span><span><span class="hljs-literal">null</span></span><span>;
    </span><span><span class="hljs-variable">$meta</span></span><span> = </span><span><span class="hljs-variable">$data</span></span><span>[</span><span><span class="hljs-string">'meta'</span></span><span>] ?? [];

    </span><span><span class="hljs-variable">$info</span></span><span>[</span><span><span class="hljs-string">'keywords'</span></span><span>] = </span><span><span class="hljs-variable">$meta</span></span><span>[</span><span><span class="hljs-string">'keywords'</span></span><span>] ?? (</span><span><span class="hljs-variable">$meta</span></span><span>[</span><span><span class="hljs-string">'og:site_name'</span></span><span>] ?? </span><span><span class="hljs-literal">null</span></span><span>);
    </span><span><span class="hljs-variable">$info</span></span><span>[</span><span><span class="hljs-string">'description'</span></span><span>] = </span><span><span class="hljs-variable">$meta</span></span><span>[</span><span><span class="hljs-string">'description'</span></span><span>] ?? (</span><span><span class="hljs-variable">$meta</span></span><span>[</span><span><span class="hljs-string">'og:description'</span></span><span>] ?? </span><span><span class="hljs-literal">null</span></span><span>);

    </span><span><span class="hljs-comment">// すべてに戻ります meta さらに使用してください</span></span><span>
    </span><span><span class="hljs-variable">$info</span></span><span>[</span><span><span class="hljs-string">'meta_all'</span></span><span>] = </span><span><span class="hljs-variable">$meta</span></span><span>;

    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$info</span></span><span>;
}

</span><span><span class="hljs-comment">// 例を使用してください:</span></span><span>
</span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-variable">$url</span></span><span> = </span><span><span class="hljs-string">'https://example.com'</span></span><span>;
    </span><span><span class="hljs-variable">$info</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fetch_page_info</span></span><span>(</span><span><span class="hljs-variable">$url</span></span><span>);
    </span><span><span class="hljs-title function_ invoke__">var_export</span></span><span>(</span><span><span class="hljs-variable">$info</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (</span><span><span class="hljs-built_in">Exception</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Error: "</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span></span>

4。パフォーマンスとキャッシュの提案

  • バッチで多数のページをcraう必要がある場合は、毎回同じURLをリアルタイムでクロールしないでください。ページの更新の頻度に応じて、キャッシュ(Re​​dis、Memcached、またはファイルキャッシュ)を使用し、1時間または24時間などの適切な有効期限ポリシーを設定することをお勧めします。

  • ターゲットサイトによってブロックされないように、またはホストからの圧力が高すぎることを避けるために、同時クロールの数を制御します。

  • 大規模なサイトの優先順位をクロールするホームページと重要なページは、すべてのリンクを盲目的にrawったことを避けています。


5。補足的なヒントと予防策

  • メタタグ作成方法は均一ではありません。多くの最新のサイトでは、OG:Title and Twitter:Titleを使用しています DOMを使用すると、すべてのタイプを一度にキャプチャできます。

  • メタタグの複製:複数のメタ名がページに表示される場合(多言語またはバージョンコントロールに使用される場合があります)、解析ロジックは最初のものを取得するかどうかを決定する必要があります。

  • メタのHTMLエンティティ&amp;などのデコードエンティティに注意してください。 、 &​​#123;html_entity_decode() )。

  • Robots/Meta-Refresh :メタリフレッシュ(リダイレクト)またはロボットnoindexを処理する必要がある場合は、 http-equivおよび対応するプロパティを具体的に確認してください。

  • robots.txtと法律に準拠しています。ターゲットサイトrobots.txtと条件をrawう、プライバシーと著作権を尊重し、制限されたコンテンツをcraうしないでください。


6。実用的なチェックリスト(クイックチェックステップ)

  1. クロール<meta name = "keywords">または<title> (2つは異なるツールであるかどうかを確認します。

  2. リモートクロールの場合:最初にCurlを使用して元のHTMLを取得して印刷し、METAの特定の書き込みとエンコードを確認します。

  3. charsetを確認してください。UTF-8でない場合は、最初に変換してから解析します。

  4. get_meta_tags()を抽出できない場合は、 Domdocumentに切り替えて、名前プロパティHTTP-Equivを同時にキャプチャします。

  5. HTTPエラー、リダイレクト、アンチクロールメカニズムを処理します(UA、タイムアウト、および再試行ポリシーを適切に設定します)。

  6. 重複するリクエストを避けるために、重要なページのキャッシュを実装します。


7。概要

  • get_meta_tags()はシンプルで使いやすいですが、標準およびシンプルなメタ名= "..."シナリオにのみ適用されます。タイプ<title>またはプロパティのメタをクロールしません

  • 複雑な、非標準、または非UTF-8ページの場合、 Curl + Domdocumentの組み合わせを使用することをお勧めします。

  • コーディング、リモートリクエストの失敗、逆クーリング、およびメタライティングは一般的な障害ポイントです。ほとんどの問題は、上記のトラブルシューティングの順に配置され、修正できます。

  • JSレンダリング(SPA、動的荷重メタ)を必要とするページを処理する必要がある場合は、ヘッドレスブラウザーまたはサーバー側のレンダリングソリューション(PHPネイティブスコープから)を使用する必要があります。