@Blog
日常日誌からプログラムやYOUTUBER紹介、旅日記まで日々更新中です。

404画像をそのまま残しておくとSEOに影響があるのでどうするか?#php
2025.04.23
おはようございます.404画像をそのまま残しておくとSEOに影響があるのでどうするか?php の場合、下記のコードで404ページに飛んでいるかどうかの確認は出来る.でも毎回、確認しているとページを表示している時に遅延が発生してとても良い処理とは言えないなのでDBに画像あるなしが確認できるテーブルを作ります.
<?php
class HttpCodeChecker
{
public function getHttpStatusCode(string $url): int|false
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
if (curl_errno($ch)) {
curl_close($ch);
return false; // エラーがあった場合
}
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $httpCode;
}
}
画像のステータス確認できるコードで定期的にページをクロールしてステータスをテーブルに保存(更新)することにより404画像によってSEOに影響を与えない作りになります.
他にも方法はあるけど、レンタルサーバーではこの方法がベストプラクティスな解なのかもしれない.クロールするのが出来ない場合は一度、画像URLをJsonデータで出力してフロントエンド側で画像有無を判断し存在するものだけを表示するという案もあるのだけども、今のSEO的にはあまりオススメはしない.
明日へ続く
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
```, エラー, コード, ステータス, データ, テーブル, フロントエンド側, ベストプラクティス, レンタルサーバー, 下記, 保存, 影響, 方法, 案, 毎回, 画像, 画像有無, 確認, 良い処理, 遅延,

webpushのLaravelを使用しないパターンを箇条書き、フロントエンド側は
2024.11.14
おはようございます.webpushのLaravelを使用しないパターンを箇条書き、フロントエンドは過去記事を参照ください.まずwebpushを使用するにはパブリックキーとシークレットキーが必要になります.下記のURLより発行してみてください.
https://web-push-codelab.glitch.me
フロントエンド側でサービスワーカーの登録された識別データをバックエンドに送信.
// db.php: データベース接続の設定
function getDbConnection() {
$host = 'localhost';
$dbname = 'your_database';
$username = 'your_username';
$password = 'your_password';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $pdo;
} catch (PDOException $e) {
die("DB接続エラー: " . $e->getMessage());
}
}
// endpoint_register.php: エンドポイントをデータベースに登録
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$endpoint = $_POST['endpoint'];
$auth = $_POST['auth'];
$p256dh = $_POST['p256dh'];
if ($endpoint && $auth && $p256dh) {
$pdo = getDbConnection();
$stmt = $pdo->prepare("INSERT INTO push_subscriptions (endpoint, auth, p256dh) VALUES (?, ?, ?)");
$stmt->execute([$endpoint, $auth, $p256dh]);
echo "登録成功";
} else {
echo "エンドポイントデータが不完全です";
}
}
バックエンド側で下記のようなコードでデータを保存します.
次にminishlink/web-pushというライブラリを使用し登録されたデータを元に送信処理を行います.
composer require minishlink/web-push
// message_send.php: データベースからエンドポイントを取得し、プッシュ通知を送信
require 'db.php';
require 'vendor/autoload.php';
use Minishlink\WebPush\WebPush;
use Minishlink\WebPush\Subscription;
// VAPIDキーの設定
$auth = [
'VAPID' => [
'subject' => 'https://example.com',
'publicKey' => 'YOUR_PUBLIC_VAPID_KEY',
'privateKey' => 'YOUR_PRIVATE_VAPID_KEY',
],
];
$webPush = new WebPush($auth);
// データベースからサブスクリプション情報を取得
$pdo = getDbConnection();
$stmt = $pdo->query("SELECT endpoint, auth, p256dh FROM push_subscriptions");
$subscriptions = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($subscriptions as $sub) {
$subscription = Subscription::create([
'endpoint' => $sub['endpoint'],
'publicKey' => $sub['p256dh'],
'authToken' => $sub['auth'],
]);
// 送信するメッセージ
$message = json_encode(['title' => '通知タイトル', 'body' => 'メッセージ内容']);
// プッシュ通知の送信
$webPush->sendOneNotification($subscription, $message);
}
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
```, エンドポイント, キー, コード, サービスワーカー, サブスクリプション情報, シークレットキー, データベース, データベース接続, パターン, バックエンド, バックエンド側, パブリックキー, プッシュ通知, フロントエンド, フロントエンド側, ライブラリ, 接続エラー, 識別データ,