diff --git a/src/app/blog/[slug]/page.tsx b/src/app/blog/[slug]/page.tsx
index e12c366..e3dfbd8 100644
--- a/src/app/blog/[slug]/page.tsx
+++ b/src/app/blog/[slug]/page.tsx
@@ -45,13 +45,25 @@ export default async function BlogPostPage({ params }: { params: Promise<{ slug:
headline: post.title,
description: post.description,
datePublished: post.date,
+ dateModified: post.date,
author: {
'@type': 'Organization',
- name: 'ObatLog',
+ name: '第29大阪技術局',
+ url: `${site}/`,
},
publisher: {
'@type': 'Organization',
- name: 'ObatLog',
+ name: '第29大阪技術局',
+ url: `${site}/`,
+ },
+ reviewedBy: {
+ '@type': 'Person',
+ name: '監修薬剤師',
+ jobTitle: 'Pharmacist',
+ },
+ mainEntityOfPage: {
+ '@type': 'WebPage',
+ '@id': `${site}/blog/${slug}/`,
},
url: `${site}/blog/${slug}/`,
};
diff --git a/src/app/blog/page.tsx b/src/app/blog/page.tsx
index f37ef1d..b06e4cb 100644
--- a/src/app/blog/page.tsx
+++ b/src/app/blog/page.tsx
@@ -6,12 +6,14 @@ import { getSiteUrl } from '../../lib/site';
const site = getSiteUrl();
export const metadata: Metadata = {
- title: 'ブログ',
- description: 'ObatLogの使い方ガイドや服薬管理のTipsを紹介します。',
+ title: '服薬管理ブログ',
+ description:
+ 'ObatLogの使い方ガイドや服薬管理のコツ、飲み忘れ防止のヒントをわかりやすく紹介。お薬との上手な付き合い方を学べるブログです。',
alternates: { canonical: `${site}/blog/` },
openGraph: {
- title: 'ブログ | ObatLog',
- description: 'ObatLogの使い方ガイドや服薬管理のTipsを紹介します。',
+ title: '服薬管理ブログ | ObatLog',
+ description:
+ 'ObatLogの使い方ガイドや服薬管理のコツ、飲み忘れ防止のヒントをわかりやすく紹介。お薬との上手な付き合い方を学べるブログです。',
url: `${site}/blog/`,
siteName: 'ObatLog',
locale: 'ja_JP',
diff --git a/src/app/changelog/layout.tsx b/src/app/changelog/layout.tsx
new file mode 100644
index 0000000..2251fd6
--- /dev/null
+++ b/src/app/changelog/layout.tsx
@@ -0,0 +1,25 @@
+import type { Metadata } from 'next';
+import { getSiteUrl } from '@/lib/site';
+
+const site = getSiteUrl();
+
+export const metadata: Metadata = {
+ title: '更新履歴',
+ description:
+ 'ObatLogの更新履歴・リリースノートです。新機能や改善内容をバージョンごとにご確認いただけます。',
+ alternates: { canonical: `${site}/changelog/` },
+ openGraph: {
+ title: '更新履歴 | ObatLog',
+ description:
+ 'ObatLogの更新履歴・リリースノートです。新機能や改善内容をバージョンごとにご確認いただけます。',
+ url: `${site}/changelog/`,
+ siteName: 'ObatLog',
+ locale: 'ja_JP',
+ type: 'website',
+ },
+ robots: { index: true, follow: true },
+};
+
+export default function ChangelogLayout({ children }: { children: React.ReactNode }) {
+ return children;
+}
diff --git a/src/app/demo/layout.tsx b/src/app/demo/layout.tsx
new file mode 100644
index 0000000..b1a2a65
--- /dev/null
+++ b/src/app/demo/layout.tsx
@@ -0,0 +1,25 @@
+import type { Metadata } from 'next';
+import { getSiteUrl } from '@/lib/site';
+
+const site = getSiteUrl();
+
+export const metadata: Metadata = {
+ title: 'デモを試す',
+ description:
+ 'ObatLogのデモモードを体験できます。登録不要で服薬記録・過量チェック・通知機能をお試しください。',
+ alternates: { canonical: `${site}/demo/` },
+ openGraph: {
+ title: 'デモを試す | ObatLog',
+ description:
+ 'ObatLogのデモモードを体験できます。登録不要で服薬記録・過量チェック・通知機能をお試しください。',
+ url: `${site}/demo/`,
+ siteName: 'ObatLog',
+ locale: 'ja_JP',
+ type: 'website',
+ },
+ robots: { index: true, follow: true },
+};
+
+export default function DemoLayout({ children }: { children: React.ReactNode }) {
+ return children;
+}
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index 5217f0b..ad7dbff 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -8,9 +8,12 @@ const site = getSiteUrl();
export const metadata: Metadata = {
metadataBase: new URL(`${site}/`),
- title: { default: 'ObatLog — 服薬記録・過量チェック', template: '%s | ObatLog' },
+ title: {
+ default: 'ObatLog|お薬の飲み忘れ・飲みすぎを防ぐ服薬記録アプリ',
+ template: '%s | ObatLog',
+ },
description:
- '毎日の服薬を記録し、1日の上限チェックで過量を防ぐシンプルなウェブアプリ(PWA)。医療機器ではありません。',
+ '毎日の服薬をワンタップで記録。過量服薬(OD)チェックと飲み忘れ通知で安心の服薬管理を。登録無料・スマホでサクッと使えるPWA対応アプリ。',
applicationName: 'ObatLog',
manifest: '/manifest.json',
openGraph: {
@@ -18,13 +21,15 @@ export const metadata: Metadata = {
locale: 'ja_JP',
url: site,
siteName: 'ObatLog',
- title: 'ObatLog — 服薬記録・過量チェック',
- description: '毎日の服薬を記録し、過量を防ぐシンプルなウェブアプリ。',
+ title: 'ObatLog|お薬の飲み忘れ・飲みすぎを防ぐ服薬記録アプリ',
+ description:
+ '毎日の服薬をワンタップで記録。過量服薬チェックと飲み忘れ通知で安心の服薬管理を。登録無料・スマホでサクッと使えるアプリ。',
},
twitter: {
card: 'summary_large_image',
- title: 'ObatLog',
- description: '服薬記録・過量チェックアプリ',
+ title: 'ObatLog|お薬の飲み忘れ・飲みすぎを防ぐ服薬記録アプリ',
+ description:
+ '毎日の服薬をワンタップで記録。過量服薬チェックと飲み忘れ通知で安心の服薬管理を。',
},
robots: { index: true, follow: true },
other: {
diff --git a/src/app/login/layout.tsx b/src/app/login/layout.tsx
new file mode 100644
index 0000000..2d1ea69
--- /dev/null
+++ b/src/app/login/layout.tsx
@@ -0,0 +1,25 @@
+import type { Metadata } from 'next';
+import { getSiteUrl } from '@/lib/site';
+
+const site = getSiteUrl();
+
+export const metadata: Metadata = {
+ title: 'ログイン',
+ description:
+ 'ObatLogにログインして服薬記録を管理しましょう。メール・Googleアカウントで簡単にログインできます。',
+ alternates: { canonical: `${site}/login/` },
+ openGraph: {
+ title: 'ログイン | ObatLog',
+ description:
+ 'ObatLogにログインして服薬記録を管理しましょう。メール・Googleアカウントで簡単にログインできます。',
+ url: `${site}/login/`,
+ siteName: 'ObatLog',
+ locale: 'ja_JP',
+ type: 'website',
+ },
+ robots: { index: false, follow: true },
+};
+
+export default function LoginLayout({ children }: { children: React.ReactNode }) {
+ return children;
+}
diff --git a/src/app/logs/layout.tsx b/src/app/logs/layout.tsx
new file mode 100644
index 0000000..d201cb4
--- /dev/null
+++ b/src/app/logs/layout.tsx
@@ -0,0 +1,12 @@
+import type { Metadata } from 'next';
+
+export const metadata: Metadata = {
+ title: '服薬ログ',
+ description:
+ '過去の服薬記録を確認できます。日付ごとにグルーピングされた服薬履歴を振り返りましょう。',
+ robots: { index: false, follow: false },
+};
+
+export default function LogsLayout({ children }: { children: React.ReactNode }) {
+ return children;
+}
diff --git a/src/app/medications/layout.tsx b/src/app/medications/layout.tsx
new file mode 100644
index 0000000..08f9096
--- /dev/null
+++ b/src/app/medications/layout.tsx
@@ -0,0 +1,12 @@
+import type { Metadata } from 'next';
+
+export const metadata: Metadata = {
+ title: 'お薬一覧',
+ description:
+ '登録したお薬の一覧ページです。薬の追加・編集・1日の上限設定・通知設定を管理できます。',
+ robots: { index: false, follow: false },
+};
+
+export default function MedicationsLayout({ children }: { children: React.ReactNode }) {
+ return children;
+}
diff --git a/src/app/page.tsx b/src/app/page.tsx
index d08ccf1..2594144 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -1,6 +1,47 @@
-'use client';
import HomePage from '@/components/HomePage';
+import { getSiteUrl } from '@/lib/site';
+
+const site = getSiteUrl();
export default function Page() {
- return ;
+ // WebApplication + Organization JSON-LD 構造化データ
+ const jsonLd = {
+ '@context': 'https://schema.org',
+ '@graph': [
+ {
+ '@type': 'WebApplication',
+ name: 'ObatLog',
+ description:
+ '毎日の服薬をワンタップで記録。過量服薬チェックと飲み忘れ通知で安心の服薬管理を。',
+ applicationCategory: 'HealthApplication',
+ operatingSystem: 'Web',
+ offers: {
+ '@type': 'Offer',
+ price: '0',
+ priceCurrency: 'JPY',
+ },
+ author: {
+ '@type': 'Organization',
+ name: '第29大阪技術局',
+ url: `${site}/`,
+ },
+ url: `${site}/`,
+ },
+ {
+ '@type': 'Organization',
+ name: '第29大阪技術局',
+ url: `${site}/`,
+ },
+ ],
+ };
+
+ return (
+ <>
+
+
+ >
+ );
}
diff --git a/src/app/privacy/layout.tsx b/src/app/privacy/layout.tsx
index fc9592a..cd8023c 100644
--- a/src/app/privacy/layout.tsx
+++ b/src/app/privacy/layout.tsx
@@ -4,13 +4,14 @@ import { getSiteUrl } from '@/lib/site';
const site = getSiteUrl();
export const metadata: Metadata = {
- title: 'Privacy Policy | ObatLog',
+ title: 'プライバシーポリシー',
description:
- 'Privacy Policy for ObatLog. How we handle email, medication records, and Firebase.',
+ 'ObatLogのプライバシーポリシーです。メールアドレス・服薬記録などの個人情報の取り扱いについてご説明します。',
alternates: { canonical: `${site}/privacy/` },
openGraph: {
- title: 'Privacy Policy | ObatLog',
- description: 'Privacy Policy for ObatLog.',
+ title: 'プライバシーポリシー | ObatLog',
+ description:
+ 'ObatLogのプライバシーポリシーです。メールアドレス・服薬記録などの個人情報の取り扱いについてご説明します。',
url: `${site}/privacy/`,
siteName: 'ObatLog',
locale: 'ja_JP',
diff --git a/src/app/settings/layout.tsx b/src/app/settings/layout.tsx
new file mode 100644
index 0000000..25a7dcc
--- /dev/null
+++ b/src/app/settings/layout.tsx
@@ -0,0 +1,12 @@
+import type { Metadata } from 'next';
+
+export const metadata: Metadata = {
+ title: '設定',
+ description:
+ 'ObatLogの設定ページです。通知設定・アカウント管理・データエクスポートなどを行えます。',
+ robots: { index: false, follow: false },
+};
+
+export default function SettingsLayout({ children }: { children: React.ReactNode }) {
+ return children;
+}
diff --git a/src/app/terms/layout.tsx b/src/app/terms/layout.tsx
index c31c756..13009c9 100644
--- a/src/app/terms/layout.tsx
+++ b/src/app/terms/layout.tsx
@@ -4,13 +4,14 @@ import { getSiteUrl } from '@/lib/site';
const site = getSiteUrl();
export const metadata: Metadata = {
- title: 'Terms of Service | ObatLog',
+ title: '利用規約',
description:
- 'Terms of Service for ObatLog, a personal medication log web app. Not a medical device.',
+ 'ObatLogの利用規約です。サービスのご利用条件・免責事項についてご確認ください。',
alternates: { canonical: `${site}/terms/` },
openGraph: {
- title: 'Terms of Service | ObatLog',
- description: 'Terms of Service for ObatLog.',
+ title: '利用規約 | ObatLog',
+ description:
+ 'ObatLogの利用規約です。サービスのご利用条件・免責事項についてご確認ください。',
url: `${site}/terms/`,
siteName: 'ObatLog',
locale: 'ja_JP',
diff --git a/src/components/HomePage.tsx b/src/components/HomePage.tsx
index a675bfe..017a7e8 100644
--- a/src/components/HomePage.tsx
+++ b/src/components/HomePage.tsx
@@ -1,3 +1,4 @@
+'use client';
// ホームページ: 認証状態でLP/ホームを切り替え
// SSG時はLandingPageをレンダリングし、クローラーにコンテンツが見えるようにする。
// クライアント側で認証状態が確定したらアプリUIに切り替え。