이전의 회사에서 public docs를 런칭하며 검색엔진 최적화를 신경써야 하는 일이 있었다! 그래서 web.dev 사이트의 Easily discoverable 파트의 아티클들을 읽고, 검색 엔진 최적화 방식에 대해 이해하기 쉽도록 정리해보았다
관련 링크
https://web.dev/how-search-works/
https://web.dev/pass-lighthouse-seo-audit/
https://developers.google.com/search/docs/fundamentals/seo-starter-guide#promote
💡 구체적인 메타 테그 작성 등 가이드 : lighthouse-seo
💡 대표적 검색엔진 관련 가이드To learn more, check out Google's I/O talks:
내 페이지의 인덱스가 생성되었는지 확인하기
site:example.com
로 검색해보기구글이 내 콘텐츠를 찾을 수 있도록 돕기
크롤링 하고 싶지 않은 페이지 알리기
robots.txt를 사용하여 알리기
# brandonsbaseballcards.com/robots.txt
# Tell Google not to crawl any URLs in the shopping cart or images in the icons folder,
# because they won't be useful in Google Search results.
User-agent: googlebot
Disallow: /checkout/
Disallow: /icons/
robots.txt의 한계: 크롤러에게 크롤링 대상이 아니라는 것은 알려줄 수 있지만, 페이지 게시 자체를 막진 않음 → 내가 크롤링을 막아둔 링크가 인터넷 어딘가 존재한다면 계속 참조되어 뜰 수 있음
그리고 robots.txt를 준수하지 않는 좀 모지란 검색엔진에서는 지시어를 따르지 않을 수 있음
결론
noindex
테그 사용구글 및 사용자가 내 콘텐츠를 이해할 수 있도록 돕기
구조화된 마크업 이용하기
<html>
<head>
<title>Apple Pie by Grandma</title>
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "Recipe",
"name": "Apple Pie by Grandma",
"author": "Elaine Smith",
"image": "https://images.edge-generalmills.com/56459281-6fe6-4d9d-984f-385c9488d824.jpg",
"description": "A classic apple pie.",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "7462",
"bestRating": "5",
"worstRating": "1"
},
"prepTime": "PT30M",
"totalTime": "PT1H30M",
"recipeYield": "8",
"nutrition": {
"@type": "NutritionInformation",
"calories": "512 calories"
},
"recipeIngredient": [
"1 box refrigerated pie crusts, softened as directed on box",
"6 cups thinly sliced, peeled apples (6 medium)"
]
}
</script>
</head>
<body>
</body>
</html>
사이트 계층 구조 구성하기
콘텐츠 최적화하기 - 좋은 콘텐츠, 독창적인 콘텐츠 ~
링크를 현명하게 사용하기
앵커 텍스트를 지나치게 일반적으로 쓰지 말 것
But. 내 사이트를 다른 사이트에 링크하면 내 사이트의 평판 중 일부를 해당 사이트에 넘겨주게 됩니다. 때때로 내 사이트의 댓글 섹션이나 메시지 보드에 자신의 사이트로 연결되는 링크를 추가함으로써 이를 노리는 사용자도 있습니다. 또는 특정 사이트를 부정적으로 언급하거나 해당 사이트에 내 사이트의 평판을 넘겨주고 싶지 않은 경우도 있습니다. → a테그의 다양한 rel 속성을 사용
// nofollow
<a rel="nofollow" href="https://cheese.example.com/Appenzeller_cheese">Appenzeller</a>
// 사용자 제작 콘텐츠 링크에 대한 처리
<a rel="ugc" href="https://cheese.example.com/Appenzeller_cheese">Appenzeller</a>
// 광고나 유료 링크에 대한
<a rel="sponsored" href="https://cheese.example.com/Appenzeller_cheese">Appenzeller</a>
<meta name="robots" content="nofollow">
내 글에 스팸 댓글을 단 경우 내 평판이 해당 스팸 댓글에 링크된 사이트에 넘겨주지 않도록 보장할 수 있음 (댓글 열 및 메시지 보드에 nofollow
를 추가)
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
<url>
<loc>http://example.com/sample1.html</loc>
<image:image>
<image:loc>http://example.com/image.jpg</image:loc>
</image:image>
<image:image>
<image:loc>http://example.com/photo.jpg</image:loc>
</image:image>
</url>
<url>
<loc>http://example.com/sample2.html</loc>
<image:image>
<image:loc>http://example.com/picture.jpg</image:loc>
</image:image>
</url>
</urlset>
Vary HTTP
헤더를 통해 캐시에서 페이지를 게재할 지 결정할 때 클라이언트를 고려해야한다는 사실을 알림 / 이 헤더 자체가 모바일에 최적화된 콘텐츠를 게재하는 URL 크롤링에 사용되는 신호 중 하나임meta name="viewport"
검색 실적 및 사용자 행동 분석하기
robots.txt
네트워크에서 리소스를 가져올 수 있는지 여부를 결정하는 데 사용하지 않지만 Googlebot은 사용
정리되어 보기 편해요 :)