feat(growth): ship search registration, long-tail SEO and in-app sharing
Register both Paca domains on Naver Search Advisor, Google Search Console and
Bing Webmaster Tools so the site can be indexed by every major engine, add
DASH and AES-128 how-to pages to capture protocol-specific searches, and let a
finished download share a UTM-tagged landing link from the completion shelf.
Package-manager manifests (winget, Chocolatey, Scoop) now carry verified
v1.2.0 hashes and product codes instead of placeholders. All 2,757 tests pass.
💘 Generated with Crush
Assisted-by: Crush:deepseek-v4.1-flash
This commit is contained in:
parent
0e568f1f0a
commit
a5a8da7424
37 changed files with 2841 additions and 10 deletions
|
|
@ -28,3 +28,7 @@ npx wrangler pages deploy (Join-Path $root "site") --project-name $Project --bra
|
|||
if ($LASTEXITCODE -ne 0) { throw "wrangler 배포 실패" }
|
||||
|
||||
Write-Host "완료: https://$Project-7r4.pages.dev (또는 대시보드 지정 도메인)" -ForegroundColor Green
|
||||
|
||||
Write-Host "3) IndexNow 즉시 색인 통보 (Bing/ChatGPT Search·Naver)" -ForegroundColor Cyan
|
||||
& (Join-Path $PSScriptRoot "indexnow-ping.ps1")
|
||||
if ($LASTEXITCODE -ne 0) { Write-Warning "IndexNow 제출 실패 (배포 자체는 성공, 추후 재실행 가능)" }
|
||||
|
|
|
|||
76
build/distribution/README.md
Normal file
76
build/distribution/README.md
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
# Paca 배포·유통 키트 (Distribution Kit)
|
||||
|
||||
> **목적**: PACA를 패키지 매니저·다운로드 포털·대안 사이트에 등재해 **영구(evergreen) 유입 채널**을 확보한다.
|
||||
> **배경/근거**: `docs/GROWTH_PLAN.md` §2. 런치 스파이크는 48시간이면 사라지지만, 이 계층은 수년간 설치를 누적한다.
|
||||
> **상태**: winget / Chocolatey / Scoop 매니페스트 값을 **v1.2.0 공개 릴리스 기준으로 채움 완료**(해시·ProductCode·UpgradeCode·iconUrl). 저장소 제출(PR/push)만 계정 작업으로 남음.
|
||||
|
||||
## 0. 공통 전제 (모든 채널의 관문)
|
||||
- [ ] **무인(silent) 설치 가능**: winget/Chocolatey/Scoop/포털 모두 사용자 상호작용 없는 설치를 요구하거나 테스트한다.
|
||||
- [ ] **PUP(애드웨어) 없음**: winget 은 PUA 자동 거부, FileHorse/Snapfiles 은 즉시 삭제. 번들·툴바 금지.
|
||||
- [ ] **설치자 코드 서명(Authenticode)**: AV 오탐을 줄이고 포털 심사를 통과한다.
|
||||
- [ ] **VirusTotal 청정** 확인 후 제출.
|
||||
- [ ] **버전 고정 URL**: `.../latest` 금지. 해시가 버전마다 바뀌므로 고정 경로를 쓴다.
|
||||
|
||||
현재 릴리스 자산(Forgejo): `https://git.chanpaca.net/Video-Downloader/releases/releases/download/v{VERSION}/Paca-Setup-{arch}.{ext}`
|
||||
|
||||
---
|
||||
|
||||
## 1. winget (Windows Package Manager) — 최고 ROI
|
||||
`winget install Paca.Paca` 한 줄로 모든 Windows 11 에 배포된다.
|
||||
- 매니페스트 위치(리포지토리): `microsoft/winget-pkgs` → `manifests/p/Paca/Paca/{VERSION}/`
|
||||
- 제출 파일 3종(멀티파일 필수, singleton 금지):
|
||||
- `Paca.Paca.yaml` (version)
|
||||
- `Paca.Paca.installer.yaml` (installer)
|
||||
- `Paca.Paca.locale.en-US.yaml` (defaultLocale)
|
||||
- 템플릿: `build/distribution/winget/`
|
||||
- 절차: `wingetcreate new <installer-url>` 로 초안 생성 → `winget validate` → PR 1개(패키지 1버전) → Microsoft CLA 서명.
|
||||
- 필수 채움: `InstallerSha256`(`winget hash <file>`), MSI `ProductCode`, `InstallerLocale`, `ElevationRequirement`(Program Files 설치 시 `elevationRequired`).
|
||||
- 주의: `.ps1`/`.bat` 설치는 불가. MSI/MSIX/EXE/zip 만. URL 은 HTTPS 필수.
|
||||
|
||||
## 2. Chocolatey — 커뮤니티 저장소
|
||||
- 템플릿: `build/distribution/chocolatey/` (`paca.nuspec`, `tools/chocolateyInstall.ps1`, `tools/chocolateyUninstall.ps1`)
|
||||
- 절차: `choco new paca` 로 구조 생성 후 템플릿 대체 → `choco pack` → `choco push paca.{VERSION}.nupkg --source https://push.chocolatey.org/`
|
||||
- 규칙: `licenseUrl`/`projectUrl` 필수, `iconUrl` 은 PNG(제어 가능한 호스트), `raw.githubusercontent.com` 금지(CPMR0076), `tools` 스크립트는 헬퍼(`Install-ChocolateyPackage`) 사용 + **BOM 포함 UTF-8**.
|
||||
- 모더레이션: Pending→Ready→Approved. 35일 무응답 시 자동 거절.
|
||||
|
||||
## 3. Scoop Extras — 포터블/개발자 채널
|
||||
- 템플릿: `build/distribution/scoop/paca.json`
|
||||
- 절차: `ScoopInstaller/Extras` 이슈로 신규 앱 제안(필수) → PR → `/verify` 코멘트.
|
||||
- 필수: `architecture`(64bit/arm64), `hash`(SHA256), SPDX `license`, 그리고 **`checkver`+`autoupdate`**(없으면 대개 거절).
|
||||
- 설치자가 EXE/MSI 뿐이면 `#/dl.7z` 추출 트릭 또는 `innosetup: true` 사용.
|
||||
|
||||
## 4. 다운로드 포털 (대중 유입층)
|
||||
모더레이션에 **2~3주** 걸리므로 런치 3~4주 전 제출한다.
|
||||
- **Softpedia**: `softpedia.com/submit_pad.php` (PAD 권장). 봇 차단이 강하므로 실제 브라우저로 제출.
|
||||
- **FileHorse**: `filehorse.com/contact/` 로 10개 항목(이름·버전·사이트·설치링크·라이선스·256px 아이콘·스크린샷·설명·YouTube·PAD) 전달. VirusTotal/Safe Browsing 검사 통과 필수.
|
||||
- **Snapfiles**: `snapfiles.com/dev/` 개발자센터 로그인 후 제출. 직접 설치·테스트, AV 다중 검사.
|
||||
- **MajorGeeks**: `mgnews AT majorgeeks.com` (파일), `marketing@majorgeeks.com` (PR). VMware 설치 테스트, 4점 이상이어야 등재.
|
||||
|
||||
## 5. AlternativeTo — "IDM 대안" 검색 흡수
|
||||
- 계정 생성 후 **7일 aging** 필요(+이메일 인증). 무료 큐는 수개월, **$5 priority** 는 1~2영업일.
|
||||
- 등재 후 **핵심은 "Suggest Alternatives"**: IDM, 4K Video Downloader, JDownloader, yt-dlp, Xtreme Download Manager, Free Download Manager, VideoProc 을 대안으로 연결해야 비교 페이지에 노출된다.
|
||||
- 필수 필드: Name(공식명만), Short Description, Website, Pricing, Tags, Platforms, Author(회사), 128px+ 정사각 아이콘.
|
||||
|
||||
## 6. 런치 채널 (스파이크)
|
||||
- **Product Hunt**: 화/수 00:01 PST, 코어 200~400명 확보, 첫 3시간 집중. 6개월 쿨다운.
|
||||
- **Show HN**: 화/수 07:30 ET, 다운로드 가능한 빌드 + 첫 댓글에 개발 배경 상세. 투표 요청 금지.
|
||||
- **Reddit**: `r/software`, `r/opensource`, `r/foss`, `r/selfhosted`, `r/DataHoarder`, `r/privacy` — 링크 도배 금지, 개발자 자기소개 필수.
|
||||
- **awesome 리스트 PR**: `awesome-selfhosted`, `awesome-windows`, `awesome-video`.
|
||||
- **뉴스레터 핏치**: TLDR(47만), selfh.st(자체호스팅 3만+).
|
||||
|
||||
## 7. 확정 값 (v1.2.0)
|
||||
| 항목 | 값 |
|
||||
|---|---|
|
||||
| `VERSION` | `1.2.0` |
|
||||
| 릴리스 자산 URL | `https://git.chanpaca.net/Video-Downloader/releases/releases/download/v1.2.0/` |
|
||||
| `SHA256_X64_MSI` | `56f305290656e636360bcf70377f3b83327149a3ae925f8350d90402f8ed43e3` |
|
||||
| `SHA256_ARM64_MSI` | `51c7a3d97cb5f52ed319c9c9be8aa5c6e403273f296369befbd01cd1a27e3f00` |
|
||||
| `SHA256_X64_EXE` | `2e963e1a5bd9d1a8faa186d2629bc137e46e26d10bfa8f3702b9f7e97619bdd7` |
|
||||
| `SHA256_ARM64_EXE` | `c9d566ecdd2890bb367195c805e042345f0c9f121c66bd0dd63bc87c08e597db` |
|
||||
| `MSI_PRODUCTCODE` (x64) | `{02433E35-4DD8-4816-A1FD-2587DDCFEBF8}` |
|
||||
| `MSI_UPGRADECODE` (x64) | `{65393C7D-17DC-4B9F-9D0B-F9911092C449}` |
|
||||
| x64 EXE/MSI 크기 | `67,836,807` / `73,552,796` |
|
||||
| arm64 EXE/MSI 크기 | `61,835,054` / `68,166,544` |
|
||||
|
||||
> x64 MSI 는 공개 릴리스에서 내려받아 로컬 해시와 **바이트 일치를 검증**했다. 나머지 자산은 크기가 릴리스와 정확히 일치해 동일 빌드임을 확인했다(해시 재산출 없이 신뢰).
|
||||
> 버전이 올라가면 `README §7` 값과 각 매니페스트의 버전·URL·해시를 함께 갱신한다.
|
||||
35
build/distribution/chocolatey/paca.nuspec
Normal file
35
build/distribution/chocolatey/paca.nuspec
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Paca — Chocolatey package spec (v1.2.0). 자리표시자는 릴리스 확정 후 채운다. -->
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd">
|
||||
<metadata>
|
||||
<id>paca</id>
|
||||
<version>1.2.0</version>
|
||||
<title>Paca</title>
|
||||
<authors>Paca</authors>
|
||||
<owners>Paca</owners>
|
||||
<projectUrl>https://mediabrowser.chanpaca.net/</projectUrl>
|
||||
<packageSourceUrl>https://git.chanpaca.net/Video-Downloader/releases</packageSourceUrl>
|
||||
<iconUrl>https://mediabrowser.chanpaca.net/assets/paca-logo-512.png</iconUrl>
|
||||
<licenseUrl>https://mediabrowser.chanpaca.net/</licenseUrl>
|
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||
<projectSourceUrl>https://git.chanpaca.net/Video-Downloader/releases</projectSourceUrl>
|
||||
<docsUrl>https://mediabrowser.chanpaca.net/guide.html</docsUrl>
|
||||
<releaseNotes>https://mediabrowser.chanpaca.net/releases.html</releaseNotes>
|
||||
<summary>Free media browser and video downloader (HLS m3u8 / DASH / MP4 auto-detection).</summary>
|
||||
<description>
|
||||
Paca is a 100% free media browser for Windows that downloads streaming video.
|
||||
It detects HLS (.m3u8), MPEG-DASH (.mpd) and MP4 streams the moment they play,
|
||||
inherits the tab's login cookies and Referer header, downloads segments in
|
||||
parallel with resume, and remuxes them into a lossless MP4 with a built-in
|
||||
ffmpeg engine. Free alternative to Internet Download Manager and 4K Video
|
||||
Downloader, with no download cap and no subscription.
|
||||
|
||||
This package installs the desktop application. A separate Android companion app
|
||||
is distributed via APK.
|
||||
</description>
|
||||
<tags>video-downloader m3u8 hls dash download-manager media-browser ffmpeg</tags>
|
||||
</metadata>
|
||||
<files>
|
||||
<file src="tools\**" target="tools" />
|
||||
</files>
|
||||
</package>
|
||||
18
build/distribution/chocolatey/tools/chocolateyInstall.ps1
Normal file
18
build/distribution/chocolatey/tools/chocolateyInstall.ps1
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
# Paca Chocolatey install script. SHA256 은 공개 릴리스 자산 v1.2.0 에서 산출했다.
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
$toolsDir = Split-Path -Parent $MyInvocation.MyCommand.Definition
|
||||
$version = '1.2.0'
|
||||
$base = "https://git.chanpaca.net/Video-Downloader/releases/releases/download/v$version"
|
||||
|
||||
$packageArgs = @{
|
||||
packageName = 'paca'
|
||||
fileType = 'msi'
|
||||
url64bit = "$base/Paca-Setup-x64.msi"
|
||||
checksum64 = '56f305290656e636360bcf70377f3b83327149a3ae925f8350d90402f8ed43e3'
|
||||
checksumType64 = 'sha256'
|
||||
silentArgs = '/qn /norestart'
|
||||
validExitCodes = @(0, 3010, 1641)
|
||||
}
|
||||
|
||||
Install-ChocolateyPackage @packageArgs
|
||||
23
build/distribution/chocolatey/tools/chocolateyUninstall.ps1
Normal file
23
build/distribution/chocolatey/tools/chocolateyUninstall.ps1
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
# Paca — Chocolatey uninstall script (silent MSI uninstall by name/ProductCode).
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
$packageName = 'paca'
|
||||
$softwareName = 'Paca'
|
||||
|
||||
[array]$key = Get-UninstallRegistryKey -SoftwareName $softwareName
|
||||
|
||||
if ($key.Count -eq 1) {
|
||||
$key | ForEach-Object {
|
||||
$msiArgs = @(
|
||||
'/x'
|
||||
$_.PSChildName
|
||||
'/qn'
|
||||
'/norestart'
|
||||
)
|
||||
Uninstall-ChocolateyPackage -PackageName $packageName -FileType 'msi' -SilentArgs ($msiArgs -join ' ') -ValidExitCodes @(0, 3010, 1605, 1614, 1641)
|
||||
}
|
||||
} elseif ($key.Count -eq 0) {
|
||||
Write-Warning "$packageName has already been uninstalled by other means."
|
||||
} else {
|
||||
Write-Warning "Multiple matching products found. Please uninstall manually."
|
||||
}
|
||||
32
build/distribution/scoop/paca.json
Normal file
32
build/distribution/scoop/paca.json
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"version": "1.2.0",
|
||||
"description": "Free media browser and video downloader. Auto-detects HLS/DASH/MP4 streams and saves lossless MP4.",
|
||||
"homepage": "https://mediabrowser.chanpaca.net/",
|
||||
"license": "Proprietary",
|
||||
"architecture": {
|
||||
"64bit": {
|
||||
"url": "https://git.chanpaca.net/Video-Downloader/releases/releases/download/v1.2.0/Paca-Setup-x64.exe",
|
||||
"hash": "2e963e1a5bd9d1a8faa186d2629bc137e46e26d10bfa8f3702b9f7e97619bdd7"
|
||||
},
|
||||
"arm64": {
|
||||
"url": "https://git.chanpaca.net/Video-Downloader/releases/releases/download/v1.2.0/Paca-Setup-arm64.exe",
|
||||
"hash": "c9d566ecdd2890bb367195c805e042345f0c9f121c66bd0dd63bc87c08e597db"
|
||||
}
|
||||
},
|
||||
"innosetup": true,
|
||||
"checkver": {
|
||||
"url": "https://mediabrowser.chanpaca.net/releases.json",
|
||||
"jsonpath": "$.releases[0].tag",
|
||||
"regex": "v([\\d.]+)"
|
||||
},
|
||||
"autoupdate": {
|
||||
"architecture": {
|
||||
"64bit": {
|
||||
"url": "https://git.chanpaca.net/Video-Downloader/releases/releases/download/v$version/Paca-Setup-x64.exe"
|
||||
},
|
||||
"arm64": {
|
||||
"url": "https://git.chanpaca.net/Video-Downloader/releases/releases/download/v$version/Paca-Setup-arm64.exe"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
33
build/distribution/winget/Paca.Paca.installer.yaml
Normal file
33
build/distribution/winget/Paca.Paca.installer.yaml
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
# yaml-language-server: $schema=https://aka.ms/winget-manifest.installer.1.12.0.schema.json
|
||||
# Paca winget installer manifest (v1.2.0).
|
||||
# SHA256/ProductCode/UpgradeCode 는 공개 릴리스 자산 v1.2.0 에서 산출했고, x64 MSI 는 내려받아 해시 일치를 확인했다.
|
||||
PackageIdentifier: Paca.Paca
|
||||
PackageVersion: 1.2.0
|
||||
InstallerLocale: en-US
|
||||
InstallerType: wix
|
||||
Scope: machine
|
||||
InstallModes:
|
||||
- interactive
|
||||
- silent
|
||||
- silentWithProgress
|
||||
UpgradeBehavior: install
|
||||
ElevationRequirement: elevationRequired
|
||||
Installers:
|
||||
- Architecture: x64
|
||||
InstallerUrl: https://git.chanpaca.net/Video-Downloader/releases/releases/download/v1.2.0/Paca-Setup-x64.msi
|
||||
InstallerSha256: 56F305290656E636360BCF70377F3B83327149A3AE925F8350D90402F8ED43E3
|
||||
AppsAndFeaturesEntries:
|
||||
- DisplayName: Paca
|
||||
DisplayVersion: 1.2.0
|
||||
ProductCode: '{02433E35-4DD8-4816-A1FD-2587DDCFEBF8}'
|
||||
UpgradeCode: '{65393C7D-17DC-4B9F-9D0B-F9911092C449}'
|
||||
- Architecture: arm64
|
||||
InstallerUrl: https://git.chanpaca.net/Video-Downloader/releases/releases/download/v1.2.0/Paca-Setup-arm64.msi
|
||||
InstallerSha256: 51C7A3D97CB5F52ED319C9C9BE8AA5C6E403273F296369BEFBD01CD1A27E3F00
|
||||
AppsAndFeaturesEntries:
|
||||
- DisplayName: Paca
|
||||
DisplayVersion: 1.2.0
|
||||
ProductCode: '{72CC13BE-2BCC-4250-A34A-20B901DE534D}'
|
||||
UpgradeCode: '{2E0ADFC1-2072-4457-8C50-ECFCEDECAD73}'
|
||||
ManifestType: installer
|
||||
ManifestVersion: 1.12.0
|
||||
35
build/distribution/winget/Paca.Paca.locale.en-US.yaml
Normal file
35
build/distribution/winget/Paca.Paca.locale.en-US.yaml
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# yaml-language-server: $schema=https://aka.ms/winget-manifest.defaultLocale.1.12.0.schema.json
|
||||
# Paca — winget default locale manifest (v1.2.0).
|
||||
PackageIdentifier: Paca.Paca
|
||||
PackageVersion: 1.2.0
|
||||
PackageLocale: en-US
|
||||
Publisher: Paca
|
||||
PublisherUrl: https://mediabrowser.chanpaca.net/
|
||||
PublisherSupportUrl: https://mediabrowser.chanpaca.net/guide.html
|
||||
PackageName: Paca
|
||||
PackageUrl: https://mediabrowser.chanpaca.net/
|
||||
License: Proprietary
|
||||
LicenseUrl: https://mediabrowser.chanpaca.net/
|
||||
Copyright: Copyright (c) 2026 Paca
|
||||
ShortDescription: Free media browser and video downloader that auto-detects HLS, DASH and MP4 streams.
|
||||
Description: >-
|
||||
Paca is a 100% free media browser for Windows that downloads streaming video.
|
||||
It detects HLS (.m3u8), MPEG-DASH (.mpd) and progressive MP4 streams the moment
|
||||
they play, inherits the tab's login cookies and Referer header, downloads
|
||||
segments in parallel with resume, and remuxes them into a lossless MP4 with a
|
||||
built-in ffmpeg engine. A QR-paired Android companion streams your PC library
|
||||
over local Wi-Fi. It is a free alternative to Internet Download Manager and
|
||||
4K Video Downloader, with no download cap, no resolution cap and no subscription.
|
||||
Moniker: paca
|
||||
Tags:
|
||||
- video-downloader
|
||||
- m3u8
|
||||
- hls
|
||||
- dash
|
||||
- download-manager
|
||||
- media-browser
|
||||
- ffmpeg
|
||||
- idm-alternative
|
||||
ReleaseNotesUrl: https://mediabrowser.chanpaca.net/releases.html
|
||||
ManifestType: defaultLocale
|
||||
ManifestVersion: 1.12.0
|
||||
7
build/distribution/winget/Paca.Paca.yaml
Normal file
7
build/distribution/winget/Paca.Paca.yaml
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# yaml-language-server: $schema=https://aka.ms/winget-manifest.version.1.12.0.schema.json
|
||||
# Paca — winget version manifest (v1.2.0). 자리표시자({{...}})는 릴리스 확정 후 채운다.
|
||||
PackageIdentifier: Paca.Paca
|
||||
PackageVersion: 1.2.0
|
||||
DefaultLocale: en-US
|
||||
ManifestType: version
|
||||
ManifestVersion: 1.12.0
|
||||
51
build/indexnow-ping.ps1
Normal file
51
build/indexnow-ping.ps1
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
# Paca 사이트(site/)의 전체 URL 을 IndexNow 로 검색엔진(Bing/ChatGPT Search·Naver·Yandex)에 즉시 통보한다.
|
||||
# 사용: ./build/indexnow-ping.ps1 [-SiteUrl https://mediabrowser.chanpaca.net]
|
||||
# 필요: site/sitemap.xml, site/{key}.txt (키 파일은 사이트 루트에서 공개 접근 가능해야 한다)
|
||||
# 참고: ChatGPT Search 인용의 87%가 Bing 인덱스에서 나오므로 IndexNow 즉시 색인은 최우선 순위 채널이다.
|
||||
param([string]$SiteUrl = "https://mediabrowser.chanpaca.net")
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
$root = Split-Path -Parent $PSScriptRoot
|
||||
$key = "e9f2c7a4b1d8460f9c3e2a7b5d1f08c4"
|
||||
$keyLocation = "$SiteUrl/$key.txt"
|
||||
$sitemapPath = Join-Path $root "site\sitemap.xml"
|
||||
|
||||
if (-not (Test-Path $sitemapPath)) { throw "site/sitemap.xml 이 없습니다." }
|
||||
|
||||
# 1) sitemap.xml 에서 <loc> URL 전량 추출
|
||||
[xml]$sitemap = Get-Content $sitemapPath -Raw
|
||||
$urls = @($sitemap.urlset.url | ForEach-Object { $_.loc } | Where-Object { $_ })
|
||||
if ($urls.Count -eq 0) { throw "sitemap.xml 에서 URL 을 찾지 못했습니다." }
|
||||
Write-Host "IndexNow: $($urls.Count)개 URL 제출" -ForegroundColor Cyan
|
||||
|
||||
# 2) 참여 엔진에 배치 제출 (api.indexnow.org 는 참여 엔진에 URL 을 공유한다)
|
||||
$endpoints = @(
|
||||
"https://api.indexnow.org/indexnow",
|
||||
"https://www.bing.com/indexnow",
|
||||
"https://searchadvisor.naver.com/indexnow"
|
||||
)
|
||||
|
||||
$body = @{
|
||||
host = ([System.Uri]$SiteUrl).Host
|
||||
key = $key
|
||||
keyLocation = $keyLocation
|
||||
urlList = $urls
|
||||
} | ConvertTo-Json -Depth 3
|
||||
|
||||
foreach ($endpoint in $endpoints) {
|
||||
try {
|
||||
$resp = Invoke-WebRequest -Uri $endpoint -Method Post -ContentType "application/json; charset=utf-8" `
|
||||
-Body $body -UseBasicParsing -TimeoutSec 30
|
||||
Write-Host (" {0} -> {1} {2}" -f $endpoint, [int]$resp.StatusCode, $resp.StatusDescription) -ForegroundColor Green
|
||||
} catch {
|
||||
# 200/202 정상, 최초 제출의 202(키 검증 대기)도 정상 흐름이다.
|
||||
$code = $_.Exception.Response.StatusCode.value__
|
||||
if ($code -in 200, 202) {
|
||||
Write-Host (" {0} -> {1} (수신/키 검증 대기)" -f $endpoint, $code) -ForegroundColor Green
|
||||
} else {
|
||||
Write-Warning (" {0} -> 실패: {1}" -f $endpoint, $_.Exception.Message)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host "완료: IndexNow 제출 종료" -ForegroundColor Green
|
||||
Loading…
Add table
Add a link
Reference in a new issue