# TASK: gyuhiya.com サイト修正（タイトル・説明文・OGP・アクセス情報・構造化データ）

> **このファイルはAIコーディングエージェント（Claude Code等）が読んで実行するための指示書です。**
> 人が読む用の解説は `https://gyuhiya-meo.pages.dev/meo-manual` にあります。

- 対象リポジトリ：Shopifyテーマ `gyuhiya-hp`（ブランチ `main`）／サイト `https://gyuhiya.com`
- 作成：2026-08-29 ／ AMU 杉山
- 実測日時：**2026-08-29 15:00 JST**

---

## 0. あなたへの指示（最初に必ず読む）

あなたはこのリポジトリで **Phase 2 のタスクA〜D だけ** を実行します。（**タスクEは「実施しない」が結論**です。理由はタスクEの節を読んでください）

### やること

1. **Phase 1 の探索を必ず先に行う。** このファイルにはファイルパスの推定が書いてありますが、**推定です。**
   実際にどのファイルに何があるかは、あなたが `grep` で確認してから判断してください。
2. タスクA〜Dを、**受入条件を満たすまで**実装する。**タスクEは実装しない。**
3. **Phase 3 の検証スクリプトを実行**し、PASS/FAIL を確認する。
4. **Phase 4 の形式で報告**する。

### 絶対にやってはいけないこと

| 禁止 | 理由 |
|---|---|
| **`main` ブランチで直接作業する** | GitHub連携テーマのため、pushが即本番反映されます |
| **既存の構造化データ（JSON-LD）を書き換える・消す** | `Organization` / `Store` / `Product` / `ShippingService` / `MerchantReturnPolicy` は実装済みで**正常動作中**です。**追記のみ可**  |
| **`{% schema %}` の内側にコードを入れる** | テーマが壊れます。入れるなら必ず**直上** |
| **既存の `og:` タグを残したまま新しい `og:` タグを追加する** | 二重出力になります。タスクAの手順に従ってください |
| **`aggregateRating` / `review` を追加する** | クチコミが0件です。虚偽の申告になりGoogleの手動対策の対象です |
| **`shopify theme push` / `shopify theme dev` で本番テーマを直接更新する** | 経路はgitの1本に固定します |
| **ページ本文に無い情報を構造化データに書く** | スパム判定の対象です |
| **確認できない値を推測で埋める** | 停止して報告してください |
| **検証せずに「完了」と報告する** | Phase 3 の実行結果を必ず添えてください |

### 停止条件（下記に当たったら、実装を中断して報告する）

- **S-1**：Phase 1 の探索で、既存の `og:` タグの出力元が特定できない
- **S-2**：探索結果が「3. 現状（実測値）」と大きく食い違う（＝サイトが更新されている）
- **S-3**：既存の JSON-LD が想定と違う構造で、追記位置が判断できない
- **S-4**：`config/settings_data.json` を編集しないと直せない箇所がある（→ 管理画面の作業なので人に渡す）
- **S-5**：タスクEに関して「実装してほしい」と指示された（→ 実施非推奨の理由を説明し、確認を取る）

**停止は失敗ではありません。** 推測で進めて誤った実装をするより、止めて確認するほうが望ましい対応です。

---

## 1. このタスクの範囲

### 範囲内（あなたが実装する）

| タスク | 内容 |
|---|---|
| A | OGP（SNS共有時の表示）を全ページで正しく出力する |
| B | アクセス情報（最寄駅・徒歩分数）をページ本文に追加する |
| C | `Store` の構造化データに `geo`（緯度経度）を追記する |
| D | `WebSite` と `BreadcrumbList` の構造化データを追加する |
| ~~E~~ | ~~`robots.txt` にAIクローラーの方針を明記~~ → **🛑 実施しない**（理由はタスクEの節） |

### 範囲外（あなたは実行しない）

| 項目 | 理由 | 対応 |
|---|---|---|
| **ページのタイトル・説明文（meta description）の設定** | **Shopify管理画面のデータ**で、テーマコードでは変更できません（`theme.liquid` は `{{ page_title }}` という入れ物を出力しているだけ） | **付録Aをそのまま出力**して、オーナーに渡してください |
| OGP画像そのものの差し替え | 画像ファイルのアップロードが必要 | 付録Aに記載 |
| 店名（`Store` の `name`）の統一 | 実際の看板の表記を確認しないと決められません | 付録Bを出力 |
| 構造化データの作り直し | **すでに実装済みで正常です** | 触らない |

---

## 2. Phase 0：作業の準備

```bash
git clone <リポジトリURL>
cd gyuhiya-hp
git switch -c site-fix-202608
```

**確認：**

```bash
git branch --show-current   # → site-fix-202608 であること（main なら中断）
```

> ⚠️ 作業中は Shopify管理画面の「コードを編集」を開かないでください。
> GitHub連携テーマでは管理画面の編集が**自動的にGitHubへコミットされ、警告なしにローカルの変更を上書き**します。

---

## 3. 現状（2026-08-29 15:00 実測）

**この値と実際が食い違う場合は S-2（停止条件）です。**

### 3-1. OGPタグの出力状況 — ページごとにバラバラです

```
トップ (/)                    : og:site_name, og:type, og:title, og:description,
                                og:url, og:image, twitter:card/title/description/image
                                → フルセットあり ✅

商品 (/products/求肥プリン3種セット) : og:image, og:image:secure_url, og:image:width,
                                og:image:height, og:image:alt のみ
                                → og:title / og:description / og:url / og:type が欠落 🔴

会社概要 (/pages/company)      : og: タグが1つもない 🔴
ブランド (/pages/brand)        : 同上 🔴
お問い合わせ (/pages/contact)  : 同上 🔴
商品一覧 (/collections/frontpage): 同上 🔴
ブログ (/blogs/ニュース)        : 同上 🔴
```

🔴 **重要：この分布は「OGPが `theme.liquid` の共通headに無い」ことを示しています。**
トップだけフルセットがあるので、**トップ用のテンプレートかセクションに個別に書かれている**可能性が高いです。
また商品ページの `og:image` は `/>` で自己終了しており、**トップとはコードの書き方が違います**（＝別の場所に書かれている）。

**したがって「`theme.liquid` に追記する」だけでは、トップページで og:title が2つ出ます。**
必ず Phase 1 で出力元を特定してから実装してください。

### 3-2. 構造化データ（すべて実装済み・触らない）

```
トップ  : Organization, Store+FoodEstablishment（@graph構造・@idで連結）
          MerchantReturnPolicy, ShippingService, OfferShippingDetails
商品    : Product（バリアント別Offer 4件・Shopifyの値から自動生成）
JSON-LDブロック数（トップ）: 2
文法エラー: なし
```

**未実装：** `WebSite`（タスクD）／`BreadcrumbList`（タスクD）／`geo`（タスクC）

### 3-3. その他

```
NAP表記ゆれ  : 0件（住所・電話とも統一済み） ✅
robots.txt   : Shopify生成の116行。User-agent 2群・Disallow 50件・行頭スペース0行。
               冒頭にShopifyのエージェント商取引案内（agents.md / UCP / MCP）あり。
               AIクローラーのブロックは無し → 触らない（タスクE参照）
OGP画像      : 元は 1333 x 2000（縦長）。タスクAのcrop指定で 1200x630 になる（実測確認済み）
SEOアプリ    : 検出なし（＝タグの出力元はテーマ内にあるはず）
アクセス情報 : 「天神橋筋六丁目」「11番出口」「徒歩」がサイト内に0件 🔴
```

---

## 4. Phase 1：探索（実装前に必ず実行）

**結果をすべて記録してください。Phase 4 の報告に含めます。**

```bash
# 1-1. OGPタグがどこに書かれているか
grep -rn "og:title\|og:image\|og:description\|og:url" --include="*.liquid" . | grep -v node_modules

# 1-2. metaタグを出すスニペットが呼ばれているか
grep -rn "meta-tags\|meta_tags\|render 'meta\|include 'meta" --include="*.liquid" .

# 1-3. headの構造
ls -la layout/
grep -n "</head>" layout/theme.liquid

# 1-4. 既存のJSON-LDの場所
grep -rn "application/ld+json" --include="*.liquid" .

# 1-5. 住所・営業時間が書かれている場所（タスクB用）
grep -rn "久野ハイツ\|営業時間\|531-0074" --include="*.liquid" --include="*.json" . | grep -v node_modules

# 1-6. robots.txtテンプレートの有無（タスクEは実施しないが、既存の有無だけ確認）
ls -la templates/robots.txt.liquid 2>/dev/null || echo "→ 未作成（タスクEは実施しないため、これで正常）"
```

### 判定

| 1-1の結果 | 対応 |
|---|---|
| `snippets/meta-tags.liquid` 等の**共通スニペット**に集約されている | そのファイルを編集する（タスクA-1） |
| `layout/theme.liquid` に**直書き**されている | そこを置き換える（タスクA-1） |
| **トップ用セクション/テンプレートにだけ**書かれている | セクション側から削除し、`theme.liquid` に集約する（タスクA-2） |
| **見つからない** | **S-1で停止。** Shopify外部から注入されている可能性があり、重複の危険があります |

---

## 5. Phase 2：実装

### タスクA：OGPを全ページで正しく出力する

**目的：** 商品ページと下層5ページで、SNS共有時にタイトル・説明・画像が正しく出るようにする。

> ⚠️ **付録A（管理画面でのタイトル設定）との関係：**
> このコードは `page_title`（＝管理画面で設定したSEOタイトル）をそのまま `og:title` に使います。
> **付録Aが未実施でも動きます**が、その場合は既定のタイトルが使われます。
> 付録Aを実施すると自動的にog:titleにも反映されるため、**実装の順序は問いません。**

#### A-1. 既存のOGPタグを特定して、削除する

Phase 1-1 で見つかった `og:` / `twitter:` のタグを**すべて削除**します。

- 削除前に、削除する行を**そのまま報告に控えてください**（Phase 4 に記載）
- **JSON-LD（`application/ld+json`）は絶対に消さないでください。** 消すのは `<meta property="og:...">` と `<meta name="twitter:...">` だけです

#### A-2. 共通のOGPブロックを `layout/theme.liquid` の `</head>` 直前に追加する

```liquid
{%- comment -%} ===== OGP / Twitter Card（AMU 2026-08 追加・ここに集約） ===== {%- endcomment -%}

{%- comment -%}
  og:title は「管理画面で設定したSEOタイトル（= page_title）」をそのまま使います。
  こうしないと、付録Aでタイトルを設定したあとに
  「ブランドについて｜大阪・天六の求肥屋｜大阪・天六の求肥屋」のように語尾が重複します。
  未設定のページだけ、保険として店名を後置します。
{%- endcomment -%}
{%- if page_title != blank -%}
  {%- assign og_title = page_title -%}
{%- else -%}
  {%- assign og_title = '【公式】求肥屋｜大阪・天六の求肥プリン専門店' -%}
{%- endif -%}
{%- unless og_title contains '求肥屋' -%}
  {%- assign og_title = og_title | append: '｜大阪・天六の求肥屋' -%}
{%- endunless -%}

{%- if page_description != blank -%}
  {%- assign og_desc = page_description | strip_html | strip | truncate: 120 -%}
{%- else -%}
  {%- assign og_desc = 'もち米からつくる求肥となめらかなプリンを重ねた「求肥プリン」。大阪・天神橋筋六丁目の求肥屋から、冷凍で全国へお届けします。' -%}
{%- endif -%}

{%- comment -%}
  Shopify CDN の crop パラメータで、既存の縦長画像を 1200x630 に中央クロップしています。
  → 専用画像を用意しなくても、共有時の「上下が切れる」問題はこの時点で解消します（AMUで実測確認済み）。
  付録Aで専用の横長画像を用意した場合は、このURLを差し替えてください（crop指定は不要になります）。
{%- endcomment -%}
{%- assign og_fallback_url = 'https://gyuhiya.com/cdn/shop/files/set-box.jpg?v=1787210799&width=1200&height=630&crop=center' -%}
{%- assign og_fallback_w = '1200' -%}
{%- assign og_fallback_h = '630' -%}

<meta property="og:site_name" content="求肥屋">
<meta property="og:locale" content="ja_JP">
<meta property="og:url" content="{{ canonical_url }}">
<meta property="og:title" content="{{ og_title | escape }}">
<meta property="og:description" content="{{ og_desc | escape }}">
<meta property="og:type" content="{% if template.name == 'product' %}product{% elsif template.name == 'article' %}article{% else %}website{% endif %}">
{%- if template.name == 'product' and product.featured_image -%}
  {%- comment -%}
    🔴 重要：商品画像は縦長（1333x2000）です。そのまま渡すとSNS側で上下が切られるため、
    Shopifyの画像変換で 1200x630 に中央クロップします。crop指定を外さないでください。
  {%- endcomment -%}
  <meta property="og:image" content="https:{{ product.featured_image | image_url: width: 1200, height: 630, crop: 'center' }}">
  <meta property="og:image:width" content="1200">
  <meta property="og:image:height" content="630">
  <meta property="og:image:alt" content="{{ product.featured_image.alt | default: product.title | escape }}">
{%- else -%}
  <meta property="og:image" content="{{ og_fallback_url }}">
  <meta property="og:image:width" content="{{ og_fallback_w }}">
  <meta property="og:image:height" content="{{ og_fallback_h }}">
{%- endif -%}
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="{{ og_title | escape }}">
<meta name="twitter:description" content="{{ og_desc | escape }}">
```

> `twitter:image` は書いていません。未指定時は `og:image` が使われるため、二重管理を避けています。

**受入条件（A）**

- [ ] 全7ページで `og:title` `og:description` `og:url` `og:type` `og:image` が**各1件ずつ**出力される
- [ ] トップページで `og:title` が**2件になっていない**
- [ ] 商品ページの `og:title` に商品名が入っている
- [ ] JSON-LDのブロック数が変わっていない（トップ2件）

---

### タスクB：アクセス情報をページ本文に追加する

**目的：** 「天神橋筋六丁目駅 11番出口から徒歩5分」がサイト内に1件も無いため追加する。
来店前に必ず調べられる情報であり、地域検索の手がかりにもなります。

#### 手順

Phase 1-5 で見つかった、住所・営業時間を表示している箇所に**1行追加**します。

**追加する文言（この通りに）：**

```
アクセス：Osaka Metro / 阪急 天神橋筋六丁目駅 11番出口から徒歩5分
```

#### 分岐

| Phase 1-5 の結果 | 対応 |
|---|---|
| `.liquid` ファイル内にハードコードされている | そこに追記する |
| **`config/settings_data.json` にある** | 🔴 **S-4で停止。** テーマ設定なのでコードで書き換えると管理画面と競合します。付録Cに手順を出力して人に渡してください |
| 見つからない | 店舗情報を表示しているセクションを探し、無ければ S-4 で報告 |

**受入条件（B）**

- [ ] トップページのHTMLに「天神橋筋六丁目」と「徒歩5分」が含まれる
- [ ] 既存の住所・営業時間の表示が壊れていない

---

### タスクC：`Store` に `geo`（緯度経度）を追記する

**目的：** 店舗の座標を明示する。値はGoogleビジネスプロフィールに登録されているピンと同一です（AMUで確認済み）。

Phase 1-4 で見つかった JSON-LD のうち、`"@type": ["Store", "FoodEstablishment"]` のオブジェクトに、
**以下のキーを追記**してください（`hasMap` の隣が分かりやすいです）。

```json
"geo": {
  "@type": "GeoCoordinates",
  "latitude": 34.7117015,
  "longitude": 135.5089722
}
```

> ⚠️ **既存のキーは1つも変更しないでください。** 追記のみです。
> ⚠️ JSONのカンマ位置に注意してください。追記後に必ず構文チェック（Phase 3）を通してください。

**受入条件（C）**

- [ ] トップページの JSON-LD に `GeoCoordinates` が出力される
- [ ] JSON構文エラーがない
- [ ] `Organization` / `Store` の既存キーが欠けていない

---

### タスクD：`WebSite` と `BreadcrumbList` を追加する

#### D-1. `WebSite`

既存の `@graph` 配列に、以下のオブジェクトを**追加**してください（`Organization` の隣）。

```json
{
  "@type": "WebSite",
  "@id": "https://gyuhiya.com/#website",
  "url": "https://gyuhiya.com/",
  "name": "求肥屋",
  "inLanguage": "ja",
  "publisher": { "@id": "https://gyuhiya.com/#organization" }
}
```

> **`potentialAction` / `SearchAction` は入れないでください。** 商品が1点のみでサイト内検索の実態がなく、
> 機能していない検索を申告することになります。

#### D-2. `BreadcrumbList`

商品ページのテンプレート（`sections/main-product.liquid` 等・Phase 1で特定）の
**`{% schema %}` の直上**に追加してください。

```liquid
{%- if template.name == 'product' -%}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "ホーム", "item": "https://gyuhiya.com/" },
    { "@type": "ListItem", "position": 2, "name": "商品一覧", "item": "https://gyuhiya.com/collections/frontpage" },
    { "@type": "ListItem", "position": 3, "name": {{ product.title | json }} }
  ]
}
</script>
{%- endif -%}
```

> - 最後の要素に `item` を付けないのは仕様どおりです（現在地なのでリンク不要）
> - `{{ product.title | json }}` は**クォート込みで出力**されます。前後に `"` を足さないでください
> - 🔴 `{% schema %}` の**内側に入れるとテーマが壊れます**

**受入条件（D）**

- [ ] トップページに `WebSite` が出力される
- [ ] 商品ページに `BreadcrumbList` が出力される
- [ ] `BreadcrumbList` がトップページに出ていない
- [ ] JSON構文エラーがない

---

### タスクE：`robots.txt` — 🛑 実施しないでください（2026-08-29 実測により方針変更）

**当初は「AIクローラーへの許可を明記する」提案でしたが、本番の `robots.txt` を精査した結果、
実施すべきでないと判断しました。エージェントは何も実装せず、この節の内容を報告に含めてください。**

#### 理由1：効果がゼロ

現在の `robots.txt` は **AIクローラーを1つもブロックしていません**。
robots.txt は「禁止」を書く仕組みなので、**ブロックされていない相手に `Allow: /` を足しても動作は一切変わりません。**

#### 理由2：失うもののほうが大きい

本番の `robots.txt` は **116行**あり、冒頭に **Shopifyが自動生成しているエージェント商取引の案内**が入っています。

```
# Agent instructions: https://gyuhiya.com/agents.md
# UCP discovery: https://gyuhiya.com/.well-known/ucp
# UCP/MCP endpoint: https://gyuhiya.com/api/ucp/mcp
# Agents should use UCP/MCP for catalog, cart, and checkout...
```

これは **AIエージェントが商品を機械的に取得し、購入まで到達するための案内**で、GEOの観点ではむしろ資産です。

`templates/robots.txt.liquid` を作ると出力を完全に自前で持つことになりますが、
**`robots.default_groups` が返すのは User-agent とルールだけで、この見出しブロックは含まれません。**
→ **カスタムテンプレートを作った時点で、この案内が消える可能性があります。**

#### 理由3：出力の劣化

Shopify公式のテンプレート例をそのまま使うと `Disallow:` 行に**先頭スペースが入ります**。
現在の本番出力は**行頭スペースが0行**なので、書式が劣化します
（Googleのパーサーは許容しますが、わざわざ崩す理由がありません）。

#### 例外：将来「AIに使わせたくない」と方針が変わった場合のみ

`Disallow` を書くには確かに `robots.txt.liquid` が必要になります。
ただし**上記の見出しブロックが残るかを実機で確認しながら**進める必要があるため、
**このファイルでは実装せず、あらためてご相談ください。**

**受入条件（E）**

- [ ] **何も変更していないこと**（`templates/robots.txt.liquid` を作成していない）
- [ ] `https://gyuhiya.com/robots.txt` が変更前と同一であること

---

## 6. Phase 3：検証

**デプロイ後（プレビューURLまたは本番）に実行してください。**

```bash
#!/bin/bash
# BASE をプレビューURLに変えて実行
BASE="https://gyuhiya.com"
UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/124.0 Safari/537.36"
PROD="/products/%E6%B1%82%E8%82%A5%E3%83%97%E3%83%AA%E3%83%B33%E7%A8%AE%E3%82%BB%E3%83%83%E3%83%88"
pass(){ printf "  PASS  %s\n" "$1"; }
fail(){ printf "  FAIL  %s (実測: %s)\n" "$1" "$2"; }
chk(){ # chk "ラベル" 実測値 期待値
  [ "$2" = "$3" ] && pass "$1" || fail "$1" "$2 / 期待 $3"; }
# 出現回数で数える（grep -c は行単位なので、タグが1行に詰まったテーマだと数え落とします）
cnt(){ printf '%s' "$1" | grep -o "$2" | wc -l | tr -d ' '; }

for p in "/" "$PROD" "/pages/brand" "/pages/company" "/pages/contact" "/collections/frontpage"; do
  H=$(curl -sL --max-time 25 -A "$UA" "$BASE$p")
  echo "=== $p"
  chk "og:title が1件"       "$(cnt "$H" 'property="og:title"')" "1"
  chk "og:description が1件" "$(cnt "$H" 'property="og:description"')" "1"
  chk "og:url が1件"         "$(cnt "$H" 'property="og:url"')" "1"
  chk "og:type が1件"        "$(cnt "$H" 'property="og:type"')" "1"
  chk "og:image が1件"       "$(cnt "$H" 'property="og:image"')" "1"
done

echo "=== トップ 固有"
H=$(curl -sL --max-time 25 -A "$UA" "$BASE/")
chk "JSON-LDが2ブロック"  "$(cnt "$H" 'application/ld+json')" "2"
chk "GeoCoordinates あり" "$(cnt "$H" 'GeoCoordinates')" "1"
chk "WebSite あり"        "$(cnt "$H" '"WebSite"')" "1"
chk "BreadcrumbList 無し" "$(cnt "$H" 'BreadcrumbList')" "0"
printf '%s' "$H" | grep -q "天神橋筋六丁目" && pass "アクセス情報あり" || fail "アクセス情報あり" "見つからない"
printf '%s' "$H" | grep -q "徒歩5分" && pass "徒歩5分あり" || fail "徒歩5分あり" "見つからない"
# 既存構造化データが壊れていないこと
for k in '"Organization"' '"ShippingService"' 'MerchantReturnPolicy' '久野ハイツ1A'; do
  printf '%s' "$H" | grep -q "$k" && pass "既存 $k 健在" || fail "既存 $k 健在" "消失"
done

echo "=== 商品ページ 固有"
H=$(curl -sL --max-time 25 -A "$UA" "$BASE$PROD")
chk "BreadcrumbList あり" "$(cnt "$H" 'BreadcrumbList')" "1"
printf '%s' "$H" | grep -q '"Product"' && pass "既存 Product 健在" || fail "既存 Product 健在" "消失"
printf '%s' "$H" | grep -q 'property="og:title"' && pass "商品のog:title あり" || fail "商品のog:title あり" "欠落"

echo "=== robots.txt（変更していないことの確認）"
R=$(curl -sL --max-time 20 "$BASE/robots.txt")
printf '%s' "$R" | grep -q "Sitemap:" && pass "Sitemap宣言 健在" || fail "Sitemap宣言 健在" "消失"
printf '%s' "$R" | grep -q "Disallow: /checkout" && pass "既定Disallow 健在" || fail "既定Disallow 健在" "消失"
printf '%s' "$R" | grep -q "UCP discovery" && pass "Shopifyのエージェント案内 健在" || fail "Shopifyのエージェント案内 健在" "消失（robots.txt.liquidを作った可能性）"
chk "行頭スペースの行が0" "$(printf '%s' "$R" | grep -c '^[[:space:]]\+')" "0"
```

### JSON-LDの構文チェック

```bash
curl -sL -A "Mozilla/5.0" https://gyuhiya.com/ \
 | python3 -c "
import sys,re,json
h=sys.stdin.read()
for i,b in enumerate(re.findall(r'<script[^>]*application/ld\+json[^>]*>(.*?)</script>',h,re.S),1):
    try:
        json.loads(b.strip()); print(f'  PASS  JSON-LD #{i} 構文OK')
    except Exception as e:
        print(f'  FAIL  JSON-LD #{i} {e}')
"
```

### 公式ツール（最後に必ず）

- https://search.google.com/test/rich-results — **エラー（赤）0件**であること。警告（黄）は可
- https://validator.schema.org/
- https://developers.facebook.com/tools/debug/ — 画像が横長で切れずに表示されるか

---

## 7. Phase 4：報告フォーマット

**この形式で報告してください。検証結果の貼り付けを省略しないでください。**

```
■ Phase 1 探索結果
  OGPの出力元       : （ファイルパス:行番号／複数なら全部）
  JSON-LDの場所     : （ファイルパス:行番号）
  住所・営業時間の場所: （ファイルパス:行番号 / settings_data.json の場合はその旨）
  robots.txt        : 既存 / 新規作成
  3章の実測値との差異 : なし / あり（内容:            ）

■ 削除した既存タグ（タスクA-1）
  （削除した行をそのまま貼る。無い場合は「なし」）

■ 実装
  A OGP            : 完了 / 未 / 停止（理由:        ）
  B アクセス情報    : 完了 / 未 / 停止（理由:        ）
  C geo            : 完了 / 未 / 停止（理由:        ）
  D WebSite+Breadcrumb: 完了 / 未 / 停止（理由:        ）
  E robots.txt     : 完了 / 未 / 停止（方針の指示待ち）

■ Phase 3 検証結果
  （スクリプトの出力をそのまま貼る）
  リッチリザルトテスト : エラー0件 / エラーあり（        ）

■ 変更ファイル一覧
  （git diff --stat の出力）

■ 判断に迷った点・オーナーに確認が必要な点
  （あれば記載。無ければ「なし」）

■ 人の作業として残っているもの
  （付録A・B・Cのうち、該当するものを列挙）
```

---

# 付録A：Shopify管理画面での作業（エージェントは実行しない）

> **エージェントへ：この付録はあなたの作業ではありません。**
> **報告の最後に、この付録をそのままオーナーへの引き継ぎとして出力してください。**

## A-1. 各ページのタイトルと説明文を設定する

**現状：サイト全7ページのタイトルに「大阪」「天六」が一度も出てきません。**
また `brand`（英語スラッグのまま）、`ホームページ`（商品一覧なのに）という設定漏れがあります。

**操作場所：** 管理画面 → オンラインストア → 各ページ → 一番下「検索エンジンでの表示を編集する」
（トップページのみ：オンラインストア → 各種設定 → 「検索エンジンでの表示を編集する」）

### ① トップページ
```
タイトル：【公式】求肥屋｜大阪・天六の求肥プリン専門店

説明文：もち米からつくる求肥となめらかなプリンを重ねた「求肥プリン」。絹のようにのびる新食感を、大阪・天神橋筋六丁目の店舗と全国発送でお届けします。みたらし・黒ごま・あんこの3種。
```

### ② 商品ページ（求肥プリン）
```
タイトル：求肥プリン 3種セット｜大阪・天六の求肥屋【公式】

説明文：大阪・天六の求肥屋がつくる「求肥プリン」3種セット（¥2,360・税込）。みたらし・黒ごま・あんこ。卵不使用、冷凍でお届け。手土産・ギフトにも。単品770円〜。
```
> 🔴 現在の説明文は本文の先頭がそのまま入っており（「冷凍でお届けします。冷蔵庫で8時間…」）、
> 長すぎて検索結果で切られ、**商品名も価格も地名も表示されません。** ここは効果が大きい修正です。

### ③ ブランド `/pages/brand`
```
タイトル：ブランドについて｜大阪・天六の求肥屋

説明文：「日本のおいしさに、あたらしい所作を。」求肥屋がなぜ求肥とプリンを重ねたのか、素材と製法についてご紹介します。
```

### ④ 会社概要 `/pages/company`
```
タイトル：会社概要｜株式会社求肥屋（大阪市北区）

説明文：株式会社求肥屋の会社概要。所在地・代表者・事業内容をご案内します。大阪市北区本庄東、天神橋筋六丁目駅から徒歩5分。
```

### ⑤ お問い合わせ `/pages/contact`
```
タイトル：お問い合わせ｜大阪・天六の求肥屋

説明文：求肥屋へのお問い合わせ。商品・ご注文・催事・お取り扱いに関するご相談を承ります。
```

### ⑥ 商品一覧 `/collections/frontpage`
```
タイトル：商品一覧｜求肥プリン｜大阪・天六の求肥屋

説明文：求肥屋の商品一覧。求肥プリン3種セット、みたらし・黒ごま・あんこの単品をご覧いただけます。
```
> 現在「ホームページ」というタイトルです。コレクション名自体の変更が必要な場合があります。

### ⑦ ブログ `/blogs/ニュース`
```
タイトル：お知らせ｜大阪・天六の求肥屋

説明文：求肥屋からのお知らせ。新商品、催事出店、季節限定のご案内を掲載しています。
```

## A-2. OGP画像（SNS共有画像）を差し替える

> ✅ **朗報：タスクAを実装した時点で、この問題は暫定的に解消します。**
> Shopifyの画像変換機能（`crop=center`）で、既存の写真を自動的に 1200×630 に切り出すようにしたためです。
> AMU側で実際に切り出して確認したところ、**掛け紙の「求肥屋」が大きく入る良い構図**になりました。
> **下記は「さらに良くしたい場合」の作業です。急ぎではありません。**

**現状：元画像は 1333 × 2000 の縦長。** LINE・X・Facebookは横長（約1.91:1）に切り取ります。
自動クロップは中央を切り出すため構図は選べません。**意図した構図にしたい場合のみ**、専用画像をご用意ください。

```
必要なサイズ：1200 × 630 ピクセル（横長）
形式        ：JPGまたはPNG／1MB以下が望ましい
内容        ：商品が横位置で収まるもの。文字を入れる場合は中央寄せ
```

**手順：** 管理画面 → コンテンツ → ファイル にアップロード → URLをコピー →
`layout/theme.liquid` の `og_fallback_url` / `og_fallback_w` / `og_fallback_h` を差し替え（開発担当へ依頼）

> **画像はAMU側でご用意できます。** 既存の商品写真から1200×630版を作成してお渡しできますので、ご連絡ください。

---

# 付録B：店名の統一（判断が必要・実装しない）

**現在3通りに割れています。**

| 場所 | 表記 |
|---|---|
| Googleビジネスプロフィール | `求肥専門店“求肥屋”` |
| 構造化データ `Store` の `name` | `求肥屋 天六店` |
| 構造化データ `Organization` の `name` | `株式会社求肥屋` |

店名はGoogleが「同じ店だ」と判定する軸です。割れていると結びつきが弱まります。

**決め方：実際の看板・入口の表記に合わせてください。**
Googleのガイドラインでは、ビジネス名は現実世界で使われている名称であることが求められます。

- 看板が「求肥専門店 求肥屋」 → GBPが正。`Store` の `name` をそれに合わせる
- 看板が「求肥屋」のみ → GBPから「求肥専門店」を外す（キーワード追加とみなされる可能性）

> `Organization` が `株式会社求肥屋`（法人名）なのは**正しい**ので変更不要です。揃えるのは `Store` です。

---

# 付録C：テーマ設定にアクセス情報がある場合（S-4のとき）

住所・営業時間が `config/settings_data.json` にある場合、コードで直すと管理画面と競合します。

**管理画面 → オンラインストア → テーマ → カスタマイズ** から、
住所・営業時間を表示しているセクションを開き、以下の1行を追加してください。

```
アクセス：Osaka Metro / 阪急 天神橋筋六丁目駅 11番出口から徒歩5分
```

---

# 付録D：今回やらないこと（次のフェーズ・優先度順）

1. **ブログ記事の追加** — `/blogs/ニュース` は記事0件。**AI検索に引用されるうえで最も効くのは記事本文の質と量**なので、最大の伸びしろです
2. **FAQページの新設** — 本文にFAQを載せた**うえで** `FAQPage` 構造化データを入れます。本文なしで構造化データだけ入れるのはガイドライン違反です（順序を逆にしないこと）
3. **多言語対応（英・韓・繁中）** — 現在サイトは日本語のみ。GBPは4言語化済みなので、`/en/` 等の独立URL＋`hreflang` で対応するとインバウンドを取り込めます
4. **商品重量の登録** — 全商品0g。現在は地域別固定送料なので実害はありませんが、送料自動計算に切り替える際に必要です
