Skip to content

Commit e6b3b3a

Browse files
committed
페이지별 메타데이터
1 parent b1634a8 commit e6b3b3a

File tree

41 files changed

+601
-49
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+601
-49
lines changed

app/routes/404.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
import { useLocation, useNavigate } from 'react-router';
2-
import ErrorState from '~/components/ui/ErrorState';
32
import Header from '~/components/layout/Header';
3+
import ErrorState from '~/components/ui/ErrorState';
44
import { useLanguage } from '~/hooks/useLanguage';
55

6+
export function meta() {
7+
return [
8+
{ title: '페이지를 찾을 수 없습니다 | 서울대학교 컴퓨터공학부' },
9+
{ name: 'description', content: '요청하신 페이지를 찾을 수 없습니다.' },
10+
];
11+
}
12+
613
export default function NotFound() {
714
const { pathname } = useLocation();
815
const navigate = useNavigate();

app/routes/about/contact.tsx

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import type { Route } from '.react-router/types/app/routes/about/+types/contact';
22
import type { LoaderFunctionArgs } from 'react-router';
3-
import Button from '~/components/ui/Button';
4-
import ContentSection from '~/components/feature/content/ContentSection';
5-
import HTMLViewer from '~/components/ui/HTMLViewer';
63
import LoginVisible from '~/components/feature/auth/LoginVisible';
4+
import ContentSection from '~/components/feature/content/ContentSection';
75
import PageLayout from '~/components/layout/PageLayout';
6+
import Button from '~/components/ui/Button';
7+
import HTMLViewer from '~/components/ui/HTMLViewer';
88
import { BASE_URL } from '~/constants/api';
99
import { useLanguage } from '~/hooks/useLanguage';
1010
import { useAboutSubNav } from '~/hooks/useSubNav';
@@ -15,6 +15,17 @@ interface ContactResponse {
1515
imageURL: string | null;
1616
}
1717

18+
export function meta() {
19+
return [
20+
{ title: '연락처 | 서울대학교 컴퓨터공학부' },
21+
{
22+
name: 'description',
23+
content:
24+
'서울대학교 컴퓨터공학부 사무실 연락처 및 위치 정보를 안내합니다.',
25+
},
26+
];
27+
}
28+
1829
export async function loader({ request }: LoaderFunctionArgs) {
1930
const url = new URL(request.url);
2031
const locale = getLocaleFromPathname(url.pathname);

app/routes/about/directions/index.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import type { Route } from '.react-router/types/app/routes/about/directions/+types/index';
22
import { Link } from 'react-router';
3-
import Button from '~/components/ui/Button';
4-
import HTMLViewer from '~/components/ui/HTMLViewer';
53
import LoginVisible from '~/components/feature/auth/LoginVisible';
64
import SelectionList from '~/components/feature/selection/SelectionList';
75
import footerTranslations from '~/components/layout/Footer/translations.json';
86
import PageLayout from '~/components/layout/PageLayout';
7+
import Button from '~/components/ui/Button';
8+
import HTMLViewer from '~/components/ui/HTMLViewer';
99
import { BASE_URL } from '~/constants/api';
1010
import { useLanguage } from '~/hooks/useLanguage';
1111
import { useSelectionList } from '~/hooks/useSelectionList';
@@ -14,6 +14,17 @@ import type { DirectionsResponse } from '~/types/api/v2/about/directions';
1414
import { encodeParam } from '~/utils/string';
1515
import KakaoMap from './components/KakaoMap';
1616

17+
export function meta() {
18+
return [
19+
{ title: '찾아오는 길 | 서울대학교 컴퓨터공학부' },
20+
{
21+
name: 'description',
22+
content:
23+
'서울대학교 컴퓨터공학부 위치 및 교통편 안내, 캠퍼스 찾아오는 방법을 제공합니다.',
24+
},
25+
];
26+
}
27+
1728
export async function loader() {
1829
const response = await fetch(`${BASE_URL}/v2/about/directions`);
1930
if (!response.ok) throw new Error('Failed to fetch directions');

app/routes/about/facilities/index.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,26 @@
11
import type { Route } from '.react-router/types/app/routes/about/facilities/+types/index';
22
import type { LoaderFunctionArgs } from 'react-router';
3-
import Button from '~/components/ui/Button';
43
import LoginVisible from '~/components/feature/auth/LoginVisible';
54
import PageLayout from '~/components/layout/PageLayout';
5+
import Button from '~/components/ui/Button';
66
import { BASE_URL } from '~/constants/api';
77
import { useLanguage } from '~/hooks/useLanguage';
88
import { useAboutSubNav } from '~/hooks/useSubNav';
99
import type { FacilitiesResponse } from '~/types/api/v2/about/facilities';
1010
import { getLocaleFromPathname } from '~/utils/string';
1111
import FacilitiesList from './components/FacilitiesList';
1212

13+
export function meta() {
14+
return [
15+
{ title: '시설 안내 | 서울대학교 컴퓨터공학부' },
16+
{
17+
name: 'description',
18+
content:
19+
'서울대학교 컴퓨터공학부의 연구실, 강의실, 실습실 등 주요 시설을 안내합니다.',
20+
},
21+
];
22+
}
23+
1324
export async function loader({ request }: LoaderFunctionArgs) {
1425
const url = new URL(request.url);
1526
const locale = getLocaleFromPathname(url.pathname);

app/routes/about/future-careers/index.tsx

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import type { Route } from '.react-router/types/app/routes/about/future-careers/+types/index';
22
import type { LoaderFunctionArgs } from 'react-router';
3-
import Button from '~/components/ui/Button';
4-
import ContentSection from '~/components/feature/content/ContentSection';
5-
import HTMLViewer from '~/components/ui/HTMLViewer';
63
import LoginVisible from '~/components/feature/auth/LoginVisible';
4+
import ContentSection from '~/components/feature/content/ContentSection';
75
import PageLayout from '~/components/layout/PageLayout';
6+
import Button from '~/components/ui/Button';
7+
import HTMLViewer from '~/components/ui/HTMLViewer';
88
import { BASE_URL } from '~/constants/api';
99
import { useLanguage } from '~/hooks/useLanguage';
1010
import { useAboutSubNav } from '~/hooks/useSubNav';
@@ -13,6 +13,17 @@ import { getLocaleFromPathname } from '~/utils/string';
1313
import CareerCompanies from './components/CareerCompanies';
1414
import CareerStat from './components/CareerStat';
1515

16+
export function meta() {
17+
return [
18+
{ title: '졸업생 진로 | 서울대학교 컴퓨터공학부' },
19+
{
20+
name: 'description',
21+
content:
22+
'서울대학교 컴퓨터공학부 졸업생들의 진로 현황과 주요 취업 기업, 창업 정보를 제공합니다.',
23+
},
24+
];
25+
}
26+
1627
export async function loader({ request }: LoaderFunctionArgs) {
1728
const url = new URL(request.url);
1829
const locale = getLocaleFromPathname(url.pathname);

app/routes/about/greetings.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,16 @@ import { useAboutSubNav } from '~/hooks/useSubNav';
1212
import type { AboutContent } from '~/types/api/v2/about/content';
1313
import { getLocaleFromPathname } from '~/utils/string';
1414

15+
export function meta() {
16+
return [
17+
{ title: '학부장 인사말 | 서울대학교 컴퓨터공학부' },
18+
{
19+
name: 'description',
20+
content: '서울대학교 컴퓨터공학부 학부장의 인사말을 전합니다.',
21+
},
22+
];
23+
}
24+
1525
export async function loader({ request }: LoaderFunctionArgs) {
1626
const url = new URL(request.url);
1727
const locale = getLocaleFromPathname(url.pathname);

app/routes/about/history.tsx

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,27 @@
11
import type { Route } from '.react-router/types/app/routes/about/+types/history';
22
import type { LoaderFunctionArgs } from 'react-router';
3-
import Button from '~/components/ui/Button';
4-
import ContentSection from '~/components/feature/content/ContentSection';
5-
import HTMLViewer from '~/components/ui/HTMLViewer';
63
import LoginVisible from '~/components/feature/auth/LoginVisible';
4+
import ContentSection from '~/components/feature/content/ContentSection';
75
import PageLayout from '~/components/layout/PageLayout';
6+
import Button from '~/components/ui/Button';
7+
import HTMLViewer from '~/components/ui/HTMLViewer';
88
import { BASE_URL } from '~/constants/api';
99
import { useLanguage } from '~/hooks/useLanguage';
1010
import { useAboutSubNav } from '~/hooks/useSubNav';
1111
import type { AboutContent } from '~/types/api/v2/about/content';
1212
import { getLocaleFromPathname } from '~/utils/string';
1313

14+
export function meta() {
15+
return [
16+
{ title: '연혁 | 서울대학교 컴퓨터공학부' },
17+
{
18+
name: 'description',
19+
content:
20+
'서울대학교 컴퓨터공학부의 역사와 발전 과정, 주요 연혁을 소개합니다.',
21+
},
22+
];
23+
}
24+
1425
export async function loader({ request }: LoaderFunctionArgs) {
1526
const url = new URL(request.url);
1627
const locale = getLocaleFromPathname(url.pathname);

app/routes/about/overview/index.tsx

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import type { Route } from '.react-router/types/app/routes/about/overview/+types/index';
2+
import LoginVisible from '~/components/feature/auth/LoginVisible';
3+
import ContentSection from '~/components/feature/content/ContentSection';
4+
import PageLayout from '~/components/layout/PageLayout';
25
import Attachments from '~/components/ui/Attachments';
36
import Button from '~/components/ui/Button';
4-
import ContentSection from '~/components/feature/content/ContentSection';
57
import HTMLViewer from '~/components/ui/HTMLViewer';
68
import Image from '~/components/ui/Image';
7-
import LoginVisible from '~/components/feature/auth/LoginVisible';
8-
import PageLayout from '~/components/layout/PageLayout';
99
import { BASE_URL } from '~/constants/api';
1010
import { useLanguage } from '~/hooks/useLanguage';
1111
import commonTranslations from '~/translations.json';
@@ -14,6 +14,17 @@ import { getLocaleFromPathname } from '~/utils/string';
1414
import brochure1 from '../assets/brochure1.png';
1515
import brochure2 from '../assets/brochure2.png';
1616

17+
export function meta() {
18+
return [
19+
{ title: '학부 소개 | 서울대학교 컴퓨터공학부' },
20+
{
21+
name: 'description',
22+
content:
23+
'서울대학교 컴퓨터공학부의 교육 목표와 비전, 학부 소개 정보를 제공합니다.',
24+
},
25+
];
26+
}
27+
1728
export async function loader({ request }: Route.LoaderArgs) {
1829
const url = new URL(request.url);
1930
const locale = getLocaleFromPathname(url.pathname);

app/routes/about/student-clubs/index.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import type { Route } from '.react-router/types/app/routes/about/student-clubs/+types/index';
2-
import Button from '~/components/ui/Button';
32
import LoginVisible from '~/components/feature/auth/LoginVisible';
43
import SelectionList from '~/components/feature/selection/SelectionList';
54
import PageLayout from '~/components/layout/PageLayout';
5+
import Button from '~/components/ui/Button';
66
import { BASE_URL } from '~/constants/api';
77
import { useLanguage } from '~/hooks/useLanguage';
88
import { useSelectionList } from '~/hooks/useSelectionList';
@@ -11,6 +11,17 @@ import type { StudentClubsResponse } from '~/types/api/v2/about/student-clubs';
1111
import { fetchJson } from '~/utils/fetch';
1212
import ClubDetails from './components/ClubDetails';
1313

14+
export function meta() {
15+
return [
16+
{ title: '동아리 소개 | 서울대학교 컴퓨터공학부' },
17+
{
18+
name: 'description',
19+
content:
20+
'서울대학교 컴퓨터공학부 학생 동아리 활동 및 동아리 소개 정보를 제공합니다.',
21+
},
22+
];
23+
}
24+
1425
export async function loader() {
1526
const response = await fetchJson<StudentClubsResponse>(
1627
`${BASE_URL}/v2/about/student-clubs`,

app/routes/academics/$studentType/courses.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,17 @@ import type { Course, StudentType } from '~/types/api/v2/academics';
55
import { fetchJson } from '~/utils/fetch';
66
import { getLocaleFromPathname } from '~/utils/string';
77

8+
export function meta() {
9+
return [
10+
{ title: '교과목 | 서울대학교 컴퓨터공학부' },
11+
{
12+
name: 'description',
13+
content:
14+
'서울대학교 컴퓨터공학부 개설 교과목 정보 및 강의 계획서를 확인하실 수 있습니다.',
15+
},
16+
];
17+
}
18+
819
export async function loader({ request, params }: Route.LoaderArgs) {
920
const { studentType } = params;
1021
const url = new URL(request.url);

0 commit comments

Comments
 (0)