feat: standalone Blazor WebAssembly admin + SEO enhancements

Architecture:
- Admin UI: /admin (Standalone Blazor WebAssembly, 219 WASM files)
- Portal: /portal (Razor Pages, Cookie/OAuth auth)
- Homepage: / (Razor Pages, SSR)
- API: /api (FastEndpoints + JWT)

SEO:
- Sitemap: Public content only (blog, FAQ, announcements, contact)
- robots.txt: Exclude /admin and /portal, reference production domain
- Naver verification: naverb1813cd79ddc2ded5c5291fca5cb46c2.html ready

Technical:
- TaxBaik.Web.Client: StaticWebAssetBasePath=admin
- Server Program.cs: UseBlazorFrameworkFiles + MapFallback for SPA routing
- base href="/admin/" for client-side navigation
- blazor.webassembly.js (standalone, not web.js)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-07-04 04:03:18 +09:00
parent 64e462e57e
commit 54367696dc
112 changed files with 2701 additions and 207 deletions
+17 -2
View File
@@ -15,16 +15,31 @@ public class SitemapModel : PageModel
public async Task OnGetAsync()
{
var baseUrl = "http://178.104.200.7/taxbaik";
// 프로덕션 도메인 기본값 (배포 환경에서 자동 감지 가능)
var baseUrl = $"{Request.Scheme}://{Request.Host.Value}/taxbaik";
// 정적 페이지 (공개 콘텐츠만)
Urls.AddRange(new[]
{
// 홈페이지
$"{baseUrl}",
$"{baseUrl}/about",
$"{baseUrl}/services",
$"{baseUrl}/contact",
$"{baseUrl}/blog"
$"{baseUrl}/privacy",
$"{baseUrl}/terms",
// 공개 콘텐츠
$"{baseUrl}/blog",
$"{baseUrl}/faq",
$"{baseUrl}/announcement",
$"{baseUrl}/inquiry"
// 제외: /admin (관리자), /portal (고객 포탈)
// robots.txt에서도 disallow
});
// 동적 페이지: 블로그 포스트
var (posts, _) = await _blogService.GetPublishedPagedAsync(1, 1000);
foreach (var post in posts)
{