1. HTML 태그 고치기(feat: 서론)
일을 시작한 이후 회사 코드들을 보면서, 내가 취업 준비를 하면서 만든 포트폴리오의 태그들이 난잡하다는 것을 느끼게 됐다.
프로젝트를 할 때는 일단 내가 생각한 결과물이 나오는 것에만 집중하고, 기능이 잘 굴러가는지에만 집중했던 터라 난잡한 태그들이 많이 존재했다.
그래서 이전 코드들을 하나하나 정리해 보기로 결심했다.
2. 태그를 굳이 수정해 줘야 할 이유는 뭘까?
: 가독성의 문제와 난잡해 보인다는 이유만이라면 꼭 태그를 수정해야 할 이유는 없다고 생각된다.
그러나 우리가 태그들을 잘 써야 하는 가장 중요한 이유가 있다.
바로 문법에 맞는 시맨틱 태그를 이용하여 홈페이지를 마크업해야 SEO에 좋다는 것이다.
SEO는 구글, 네이버 등의 검색 엔진으로부터 웹사이트나 웹페이지에 대한 트래픽의 품질과 양을 개선하는 과정을 말하며, 광고에 가장 중요한 요소이다.
3. 개발자가 신경 써 줘야 할 SEO 요소는?
: 태그 리팩토링 전에 가볍게 개발자가 신경 쓸 수 있는 요소를 정리해 보았다.
클릭률을 높일 수 있도록 눈길을 사로잡는 문구를 사용한다.
페이지마다 고유한 title 태그를 사용한다.
제목의 시작이나 끝에 사이트 이름을 포함하고, 나머지 제목은 하이픈(-), 콜론(:), 막대(|)를 사용한다.
HTTPS 적용하기
페이지 로딩 속도 높이기
Lighthouse 활용하기
4. Code Refactoring
1-1. 수정 전 코드(메인 화면)
=> 무분별한 div 태그의 남발을 볼 수 있다.
// index.tsx
return (
<>
<div className="flex flex-start ">
<div className="w-1/6 ">
<div>
<LeftSideBar data="홈" />
</div>
<div>
<EntranceHistory />
</div>
</div>
<div className="flex flex-col w-5/6">
<div className="mb-4 mt-2 border-2 border-t-white border-x-white border-b-neutral-100 ">
<TopMeetingList />
</div>
<div>
<MakeClubModal />
</div>
<div>
{data.map((item, idx) => {
return <CateClubList data={String(item)} key={idx} />;
})}
</div>
</div>
</div>
</>
);
1-2. 수정 후 코드(메인 화면)
=> 무분별한 div 태그를 최소화하고, main 태그를 추가해 주었다.
// index.tsx
return (
<main className="flex">
<div className="w-1/6 ">
<LeftSideBar data="홈" />
<EntranceHistory />
</div>
<div className="flex flex-col w-5/6">
<TopMeetingList topList={topList} />
<MakeClubModal />
{cateList.length === data.length &&
cateList.map((item, index) => {
return (
<CateClubList cateList={item} data={data[index]} key={index} />
);
})}
</div>
</main>
);
2-1. 수정 전 코드(클럽 컴포넌트)
=> div로 채운 태그들을 볼 수 있다.
// Club.tsx
return (
<div>
<div className=" text-center mt-4 font-bold text-[20px] text-[#6A7D7C]">
활동 중인 Club
</div>
<div
className="w-full bg-white px-4 my-6
overflow-y-auto h-[30rem] shadow-lg rounded-xl "
>
{!isLoading ? (
<>
{Array.from({ length: 4 }).map((item, index) => (
<SkeletonComponent key={index} />
))}
</>
) : (
<>
{data.length === 0 ? (
<div className="mx-4 mt-4">가입한 동아리가 없습니다.</div>
) : (
<>
{data.map((item) => (
<div
className="flex border-2 border-gray-300 bg-white
rounded-lg my-4 py-3 pl-4 px-4"
key={item.C_IDX}
>
<div className="mx-2 my-1 ">
<FiUsers size={25} />
</div>
<div>
<div>
<p className="text-[18px] font-bold">{item.C_NAME}</p>
</div>
<div className="flex text-[12px]">
<p>#{item.C_CATEGORY} </p>
<p>#{item.C_CATE_DETAIL} </p>
<p>#{item.C_AREA}</p>
</div>
</div>
</div>
))}
</>
)}
</>
)}
</div>
</div>
);
2-2. 수정 후 코드
=> div를 최소화하고 목적에 맞게 section, ul, li, p 태그 등을 적절히 추가해 주었다.
=> 그리고 SEO의 중요 요소인 h2 태그도 추가해 주었다.
// Club.tsx
return (
<section className="sm:w-1/2 w-11/12">
<h2 className="text-center mt-4 font-bold text-[20px] text-[#6A7D7C]">
{type === "attend" ? "활동 중인 클럽" : "MY Club"}
</h2>
{list?.length === 0 ? (
<div className="mx-4 mt-4">
{type === "host"
? "내가 만든 동아리가 없습니다."
: "가입한 동아리가 없습니다."}
</div>
) : (
<>
{list?.map((item: myPageClubInfo, index) => (
<div
key={index}
className="flex flex-col border-2 border-gray-300 bg-white rounded-lg m-2 p-2"
>
<p className="text-center font-bold text-[18px]">{item.C_NAME}</p>
<ul className="flex justify-center">
<li>#{item.C_CATEGORY} </li>
<li>#{item.C_CATE_DETAIL} </li>
<li>#{item.C_AREA}</li>
</ul>
</div>
))}
</>
)}
</section>
);
5. 느낀 점
프로젝트를 만들 때는 CSS를 입히는 데 어려움을 겪어서 되는대로 태그들을 추가하고, 가장 편한 div 태그들을 계속 사용했었다. 그래서 만들 당시에는 내가 만든 코드들이기에 알아보는 데는 큰 문제가 없었고, 수정해야겠다는 생각을 하지 않았기에 위의 수정 전 코드들과 같은 결과물이 나왔다.
이제는 SEO라는 중요한 키워드를 알게 됐고, 내가 코딩할 때 신경 써 줘야 할 부분이라는 것을 알기에 항상 생각하며 태그들도 사용해 나가야겠다.