{"id":27880,"date":"2026-05-25T17:44:28","date_gmt":"2026-05-25T08:44:28","guid":{"rendered":"https:\/\/motoki-design.co.jp\/wordpress\/?p=27880"},"modified":"2026-10-01T17:08:00","modified_gmt":"2026-10-01T08:08:00","slug":"gsc-anomaly-monitor-gas","status":"publish","type":"post","link":"https:\/\/motoki-design.co.jp\/wordpress\/gsc-anomaly-monitor-gas\/","title":{"rendered":"Search Console\u2502\u7570\u5e38\u3092\u6bce\u9031\u81ea\u52d5\u691c\u77e5\u3059\u308b\uff5c\u8907\u6570\u30b5\u30a4\u30c8\u5bfe\u5fdc\u306eSEO\u76e3\u8996\u30c4\u30fc\u30eb"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Search Console\u3068GAS\u3092\u9023\u643a\u3057\u3066\u3001\u6307\u6a19\u3092\u6c7a\u3081\u3066\u76e3\u8996\u3059\u308b\u30c4\u30fc\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GCP\u3092\u4f7f\u3044\u307e\u3059\u304c\u3001\u7121\u6599\u3067\u30c4\u30fc\u30eb\u3092\u4f5c\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30d6\u30ed\u30b0\u904b\u55b6\u3092\u3067\u304d\u308b\u3060\u3051\u81ea\u52d5\u5316\u3057\u305f\u3044\u3068\u3044\u3046\u5834\u5408\u3001\u554f\u984c\u3092\u6d17\u3044\u51fa\u3059\u306e\u306b\u5c0e\u5165\u3059\u308b\u3068\u6700\u4f4e\u9650\u306e\u4fdd\u5b88\u304c\u3067\u304d\u308b\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"is-style-icon_info wp-block-paragraph\">\u8907\u6570\u30b5\u30a4\u30c8\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"812\" height=\"577\" src=\"https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_15h49_03-812x577.png\" alt=\"Google Apps Script\u3067\u4f5c\u6210\u3057\u305f\u8907\u6570\u30b5\u30a4\u30c8\u5bfe\u5fdc\u306eSearch Console\u7570\u5e38\u691c\u77e5\u30c4\u30fc\u30eb\u306e\u5b9f\u884c\u753b\u9762\u3002\" class=\"wp-image-27882\" srcset=\"https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_15h49_03-812x577.png 812w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_15h49_03-382x271.png 382w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_15h49_03-768x545.png 768w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_15h49_03.png 849w\" sizes=\"(max-width: 812px) 100vw, 812px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u3053\u304b\u3089\u306f\u3001\u7121\u6599\u30d1\u30fc\u30c8\u3067\u89e3\u8aac\u3057\u305f\u30c4\u30fc\u30eb\u3092<strong>\u5b9f\u969b\u306b\u81ea\u5206\u306e\u74b0\u5883\u3067\u52d5\u304b\u3059\u307e\u3067<\/strong>\u306e\u624b\u9806\u3092\u3001\u3072\u3068\u3064\u305a\u3064\u8ffd\u3063\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GAS\u81ea\u4f53\u306f\u66f8\u3044\u305f\u3053\u3068\u304c\u3042\u3063\u3066\u3082\u3001\u300cGCP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u306e\u7d10\u4ed8\u3051\u300d\u3067\u6b62\u307e\u3063\u3066\u3057\u307e\u3046\u4eba\u306f\u3068\u3066\u3082\u591a\u3044\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u305d\u3057\u3066\u3082\u3046\u3072\u3068\u3064\u3001\u898b\u843d\u3068\u3055\u308c\u304c\u3061\u306a\u95a2\u9580\u304c <code>appsscript.json<\/code> \u3067\u306e\u30b9\u30b3\u30fc\u30d7\u5ba3\u8a00\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GAS\u306e\u300e\u30b5\u30fc\u30d3\u30b9\u300f\u8ffd\u52a0\u3060\u3051\u3067\u306f <code>UrlFetchApp<\/code> \u3067Search Console API\u3092\u76f4\u53e9\u304d\u3059\u308b\u69cb\u6210\u306f\u901a\u308a\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u3053\u3092\u6b63\u3057\u304f\u3084\u3089\u306a\u3044\u3068\u3001\u6700\u5f8c\u306e\u6700\u5f8c\u3067 <code>403<\/code> \u304c\u8fd4\u3063\u3066\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001\u305d\u306eGCP\u9023\u643a\u3092\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210\u304b\u3089\u3001\u3064\u307e\u305a\u304d\u30dd\u30a4\u30f3\u30c8\u3092\u540d\u6307\u3057\u3057\u306a\u304c\u3089\u9032\u3081\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5168\u4f53\u306e\u6d41\u308c\u306f\u3053\u3046\u3067\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list is-style-num_circle\">\n<li>GCP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u65b0\u898f\u4f5c\u6210\u3059\u308b<\/li>\n\n\n\n<li>Search Console API\u3092\u6709\u52b9\u5316\u3059\u308b<\/li>\n\n\n\n<li>OAuth\u540c\u610f\u753b\u9762\uff08Google Auth Platform\uff09\u3092\u69cb\u6210\u3059\u308b<\/li>\n\n\n\n<li>OAuth\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\uff08\u8a8d\u8a3c\u60c5\u5831\uff09\u3092\u4f5c\u6210\u3059\u308b<\/li>\n\n\n\n<li>GAS\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u308a\u3001\u30b3\u30fc\u30c9\u3092\u8cbc\u308b<\/li>\n\n\n\n<li><code>appsscript.json<\/code> \u306bOAuth\u30b9\u30b3\u30fc\u30d7\u3092\u5ba3\u8a00\u3059\u308b<\/li>\n\n\n\n<li>GAS\u3068GCP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u7d10\u4ed8\u3051\u308b<\/li>\n\n\n\n<li>\u30b9\u30af\u30ea\u30d7\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3\uff08Slack\u60c5\u5831\uff09\u3092\u30bb\u30c3\u30c8\u3059\u308b<\/li>\n\n\n\n<li>Slack\u30a2\u30d7\u30ea\u3092\u7528\u610f\u3057\u3066Bot\u3092\u62db\u5f85\u3059\u308b<\/li>\n\n\n\n<li>\u624b\u52d5\u5b9f\u884c\u3057\u3066\u6a29\u9650\u3092\u627f\u8a8d\u3059\u308b<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u901a\u77e5\u3067\u914d\u7dda\u3092\u78ba\u8a8d\u3059\u308b<\/li>\n\n\n\n<li>\u30c8\u30ea\u30ac\u30fc\u3092\u767b\u9332\u3057\u3066\u81ea\u52d5\u904b\u8ee2\u306b\u4e57\u305b\u308b<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\u6240\u8981\u6642\u9593\u306f\u3001\u521d\u3081\u3066GCP\u3092\u89e6\u308b\u5834\u5408\u306740\u301c50\u5206\u307b\u3069\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e00\u5ea6\u901a\u3057\u3066\u3057\u307e\u3048\u30702\u30b5\u30a4\u30c8\u76ee\u4ee5\u964d\u306f\u914d\u5217\u306b1\u884c\u8db3\u3059\u3060\u3051\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e8b\u524d\u6e96\u5099\uff1a\u30b5\u30c1\u30b3\u306e\u6a29\u9650\u3092\u78ba\u8a8d\u3057\u3066\u304a\u304f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u624b\u9806\u306b\u5165\u308b\u524d\u306b\u3072\u3068\u3064\u3060\u3051\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u3053\u306e\u30c4\u30fc\u30eb\u3092\u52d5\u304b\u3059Google\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u3001\u76e3\u8996\u3057\u305f\u3044\u30b5\u30a4\u30c8\u306eSearch Console\u30d7\u30ed\u30d1\u30c6\u30a3\u306b\u300c\u30aa\u30fc\u30ca\u30fc\u300d\u307e\u305f\u306f\u300c\u30d5\u30eb\u30e6\u30fc\u30b6\u30fc\u300d\u3068\u3057\u3066\u767b\u9332\u3055\u308c\u3066\u3044\u308b<\/strong>\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-style-border\"><img decoding=\"async\" width=\"353\" height=\"167\" src=\"https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h21_05.png\" alt=\"Search Console\u3067Google\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u6a29\u9650\u304c\u30aa\u30fc\u30ca\u30fc\u307e\u305f\u306f\u30d5\u30eb\u30e6\u30fc\u30b6\u30fc\u306b\u306a\u3063\u3066\u3044\u308b\u304b\u3092\u78ba\u8a8d\u3059\u308b\u753b\u9762\u3002\" class=\"wp-image-27889\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u300c\u5236\u9650\u4ed8\u304d\u30e6\u30fc\u30b6\u30fc\u300d\u3067\u306f Search Analytics \u306e\u4e00\u90e8\u3084 URL Inspection API \u304c\u53e9\u3051\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8907\u6570\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f7f\u3044\u5206\u3051\u3066\u3044\u308b\u4eba\u306f\u3001\u3069\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3067GAS\u3092\u52d5\u304b\u3059\u304b\u3092\u6700\u521d\u306b\u6c7a\u3081\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u305d\u306e\u3046\u3048\u3067\u3001\u305d\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u6a29\u9650\u3092\u30b5\u30c1\u30b3\u5074\u3067\u78ba\u8a8d\u3057\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u3053\u304c\u305a\u308c\u3066\u3044\u308b\u3068\u3001\u5f8c\u534a\u3067\u539f\u56e0\u306e\u5206\u304b\u308a\u306b\u304f\u3044\u30a8\u30e9\u30fc\u306b\u60a9\u307e\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30b5\u30c1\u30b3\u306e\u300c\u8a2d\u5b9a &gt; \u30e6\u30fc\u30b6\u30fc\u3068\u6a29\u9650\u300d\u3067\u3001\u81ea\u5206\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u6a29\u9650\u304c\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u30b9\u30c6\u30c3\u30d71\uff1aGCP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u65b0\u898f\u4f5c\u6210\u3059\u308b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u307e\u305a Google Cloud Console\uff08<a href=\"https:\/\/console.cloud.google.com\/\">console.cloud.google.com<\/a>\uff09\u3092\u958b\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GAS\u3092\u4f7f\u3063\u3066\u3044\u308bGoogle\u30a2\u30ab\u30a6\u30f3\u30c8\u3068<strong>\u540c\u3058\u30a2\u30ab\u30a6\u30f3\u30c8<\/strong>\u3067\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u3053\u304c\u5225\u30a2\u30ab\u30a6\u30f3\u30c8\u3060\u3068\u3001\u5f8c\u3067\u7d10\u4ed8\u3051\u3067\u304d\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u753b\u9762\u4e0a\u90e8\u3001Google\u30ed\u30b4\u306e\u53f3\u96a3\u306b\u3042\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u9078\u629e\u306e\u30d7\u30eb\u30c0\u30a6\u30f3\uff08\u73fe\u5728\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u304c\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u90e8\u5206\uff09\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u521d\u3081\u3066\u306a\u3089\u300cMy First Project\u300d\u306a\u3069\u3068\u51fa\u3066\u3044\u308b\u306f\u305a\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u958b\u3044\u305f\u30c0\u30a4\u30a2\u30ed\u30b0\u306e\u53f3\u4e0a\u300c<strong>\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/strong>\u300d\u3092\u30af\u30ea\u30c3\u30af\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u4f5c\u6210\u753b\u9762\u3067\u6b21\u3092\u5165\u529b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d<\/strong>\uff1a<code>gsc-monitor<\/code> \u306a\u3069\u5206\u304b\u308a\u3084\u3059\u3044\u540d\u524d\u3002<\/li>\n\n\n\n<li>\u5f8c\u304b\u3089\u5909\u66f4\u3067\u304d\u307e\u3059\u304c\u3001<strong>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8ID<\/strong>\uff08\u540d\u524d\u306e\u4e0b\u306b\u81ea\u52d5\u751f\u6210\u3055\u308c\u308b <code>gsc-monitor-xxxxxx<\/code> \u306e\u3088\u3046\u306a\u6587\u5b57\u5217\uff09\u306f\u5909\u66f4\u3067\u304d\u306a\u3044\u306e\u3067\u3001\u3053\u3053\u3067\u591a\u5c11\u3053\u3060\u308f\u3063\u3066\u3082OK\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5834\u6240\uff08\u7d44\u7e54\uff09<\/strong>\uff1a\u500b\u4eba\u5229\u7528\u306a\u3089\u300c\u7d44\u7e54\u306a\u3057\u300d\u306e\u307e\u307e\u3067\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3002<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u300c\u4f5c\u6210\u300d\u3092\u62bc\u3059\u3068\u3001\u753b\u9762\u53f3\u4e0a\u306b\u4f5c\u6210\u4e2d\u306e\u901a\u77e5\u304c\u51fa\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">10\u301c20\u79d2\u307b\u3069\u3067\u5b8c\u4e86\u3059\u308b\u306e\u3067\u3001<strong>\u5b8c\u4e86\u3057\u305f\u3089\u5fc5\u305a\u753b\u9762\u4e0a\u90e8\u306e\u30d7\u30eb\u30c0\u30a6\u30f3\u304b\u3089\u3001\u3044\u307e\u4f5c\u3063\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5207\u308a\u66ff\u3048\u3066\u304f\u3060\u3055\u3044<\/strong>\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u3053\u3067\u5207\u308a\u66ff\u3048\u5fd8\u308c\u305f\u307e\u307e\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u306b\u9032\u307f\u3001\u5225\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067API\u3092\u6709\u52b9\u5316\u3057\u3066\u3057\u307e\u3046\u2500\u2500\u3053\u308c\u304c\u6700\u521d\u306e\u3064\u307e\u305a\u304d\u30dd\u30a4\u30f3\u30c8\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30d7\u30eb\u30c0\u30a6\u30f3\u306b\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u304c\u3001\u4eca\u4f5c\u3063\u305f\u3082\u306e\u306b\u306a\u3063\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u5f8c\u3067\u4f7f\u3046\u306e\u3067\u3001<strong>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u756a\u53f7<\/strong>\u3092\u63a7\u3048\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cloud Console\u306e\u300c\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u300d\u307e\u305f\u306f\u300c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8a2d\u5b9a\u300d\u306b\u300c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u756a\u53f7\u300d\uff0812\u6841\u524d\u5f8c\u306e\u6570\u5b57\uff09\u304c\u8868\u793a\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<strong>ID<\/strong>\uff08\u6587\u5b57\u5217\uff09\u3068\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<strong>\u756a\u53f7<\/strong>\uff08\u6570\u5b57\uff09\u306f\u5225\u7269\u3067\u3001GAS\u3068\u306e\u7d10\u4ed8\u3051\u306b\u4f7f\u3046\u306e\u306f<strong>\u756a\u53f7<\/strong>\u306e\u307b\u3046\u3067\u3059\u3002<\/p>\n<\/blockquote>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"812\" height=\"385\" src=\"https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h22_18-812x385.png\" alt=\"Google Cloud Console\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u307e\u305f\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8a2d\u5b9a\u306b\u8868\u793a\u3055\u308c\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u756a\u53f7\u306e\u78ba\u8a8d\u753b\u9762\u3002\" class=\"wp-image-27890\" srcset=\"https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h22_18-812x385.png 812w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h22_18-382x181.png 382w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h22_18-768x364.png 768w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h22_18.png 924w\" sizes=\"(max-width: 812px) 100vw, 812px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u30b9\u30c6\u30c3\u30d72\uff1aSearch Console API\u3092\u6709\u52b9\u5316\u3059\u308b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u9078\u629e\u3055\u308c\u305f\u72b6\u614b\u3067\u3001\u5de6\u4e0a\u306e\u30cf\u30f3\u30d0\u30fc\u30ac\u30fc\u30e1\u30cb\u30e5\u30fc\uff08\u2261\uff09\u304b\u3089\u300c<strong>API\u3068\u30b5\u30fc\u30d3\u30b9 &gt; \u30e9\u30a4\u30d6\u30e9\u30ea<\/strong>\u300d\u3092\u958b\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u307e\u305f\u306f\u691c\u7d22\u30d0\u30fc\u306b\u300c\u30e9\u30a4\u30d6\u30e9\u30ea\u300d\u3068\u5165\u308c\u3066\u3082\u8fbf\u308a\u7740\u3051\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">API\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u691c\u7d22\u30dc\u30c3\u30af\u30b9\u306b\u300c<strong>Search Console<\/strong>\u300d\u3068\u5165\u529b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u691c\u7d22\u7d50\u679c\u306b\u300c<strong>Google Search Console API<\/strong>\u300d\u304c\u51fa\u3066\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/console.cloud.google.com\/marketplace\/product\/google\/searchconsole.googleapis.com?\">https:\/\/console.cloud.google.com\/marketplace\/product\/google\/searchconsole.googleapis.com<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u3001\u8a73\u7d30\u30da\u30fc\u30b8\u306e\u300c<strong>\u6709\u52b9\u306b\u3059\u308b<\/strong>\u300d\u30dc\u30bf\u30f3\u3092\u62bc\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"740\" height=\"364\" src=\"https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h26_18.png\" alt=\"API\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u8a73\u7d30\u30da\u30fc\u30b8\u3067Google Search Console API\u3092\u6709\u52b9\u306b\u3059\u308b\u30dc\u30bf\u30f3\u306e\u4f4d\u7f6e\u3002\" class=\"wp-image-27892\" srcset=\"https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h26_18.png 740w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h26_18-382x188.png 382w\" sizes=\"(max-width: 740px) 100vw, 740px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u3053\u3067\u6ce8\u610f\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u691c\u7d22\u7d50\u679c\u306b\u4f3c\u305f\u540d\u524d\u306e\u3082\u306e\u304c\u8907\u6570\u51fa\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u6709\u52b9\u5316\u3059\u308b\u306e\u306f\u300c<strong>Google Search Console API<\/strong>\u300d\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u300cSearch Console\u300d\u95a2\u9023\u3067\u5225\u306e\u3082\u306e\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3001\u3053\u306e\u30c4\u30fc\u30eb\u306f\u52d5\u304d\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u540d\u524d\u3092\u6b63\u78ba\u306b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u300c\u6709\u52b9\u306b\u3059\u308b\u300d\u3092\u62bc\u3059\u3068\u6570\u79d2\u3067\u5b8c\u4e86\u3057\u3001API\u306e\u7ba1\u7406\u753b\u9762\u306b\u5207\u308a\u66ff\u308f\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3067\u3053\u306eGCP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306fSearch Console API\u3092\u53e9\u3051\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"673\" height=\"383\" src=\"https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h23_24.png\" alt=\"Search Console API\u306e\u6709\u52b9\u5316\u304c\u5b8c\u4e86\u3057\u305f\u5f8c\u306eAPI\u7ba1\u7406\u753b\u9762\u3002\" class=\"wp-image-27891\" srcset=\"https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h23_24.png 673w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h23_24-382x217.png 382w\" sizes=\"(max-width: 673px) 100vw, 673px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u30b9\u30c6\u30c3\u30d73\uff1aOAuth\u540c\u610f\u753b\u9762\uff08Google Auth Platform\uff09\u3092\u69cb\u6210\u3059\u308b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u3053\u304c\u300cGCP\u304c\u4e0d\u5b89\u300d\u306a\u4eba\u306b\u3068\u3063\u3066\u306e\u672c\u4e38\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u9806\u3092\u8ffd\u3048\u3070\u96e3\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u9805\u76ee\u304c\u591a\u3044\u306e\u3067\u843d\u3061\u7740\u3044\u3066\u9032\u3081\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"812\" height=\"222\" src=\"https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h28_02-812x222.png\" alt=\"Google Cloud Console\u3067OAuth\u540c\u610f\u753b\u9762\u306e\u8a2d\u5b9a\u3092\u958b\u59cb\u3059\u308b\u753b\u9762\u3002\" class=\"wp-image-27893\" srcset=\"https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h28_02-812x222.png 812w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h28_02-382x104.png 382w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h28_02-768x210.png 768w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h28_02.png 924w\" sizes=\"(max-width: 812px) 100vw, 812px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u30c4\u30fc\u30eb\u306f\u3001\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c\u3059\u308b\u3042\u306a\u305f\u81ea\u8eab\u306e\u6a29\u9650\u3067API\u3092\u53e9\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u305d\u306e\u305f\u3081\u306b\u300c\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u3069\u3093\u306a\u30a2\u30d7\u30ea\u3067\u3001\u8ab0\u304c\u4f7f\u3046\u306e\u304b\u300d\u3092Google\u306b\u767b\u9332\u3059\u308b\u4f5c\u696d\u304c<strong>OAuth\u540c\u610f\u753b\u9762\u306e\u69cb\u6210<\/strong>\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"is-style-icon_info wp-block-paragraph\">\u73fe\u5728\u306eGoogle Cloud Console\u3067\u306f\u3001\u3053\u306e\u8a2d\u5b9a\u304c\u300c<strong>Google Auth Platform<\/strong>\u300d\u3068\u3044\u3046\u753b\u9762\u306b\u96c6\u7d04\u3055\u308c\u3001\u5de6\u30e1\u30cb\u30e5\u30fc\u304c\u300c\u6982\u8981\uff0f\u30d6\u30e9\u30f3\u30c7\u30a3\u30f3\u30b0\uff0f\u5bfe\u8c61\uff08Audience\uff09\uff0f\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\uff0f\u30c7\u30fc\u30bf\u30a2\u30af\u30bb\u30b9\u300d\u3068\u3044\u3046\u69cb\u6210\u306b\u5909\u308f\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"is-style-icon_info wp-block-paragraph\">\u6614\u306e\u300cOAuth\u540c\u610f\u753b\u9762\u300d\u30921\u30da\u30fc\u30b8\u3067\u8a2d\u5b9a\u3057\u3066\u3044\u305f\u9803\u3068\u306f\u898b\u305f\u76ee\u304c\u9055\u3044\u307e\u3059\u304c\u3001\u3084\u308b\u3053\u3068\u306e\u672c\u8cea\u306f\u540c\u3058\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u300cGoogle Auth Platform\u300d\u3092\u958b\u304f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5de6\u30e1\u30cb\u30e5\u30fc\u304b\u3089\u300c<strong>API\u3068\u30b5\u30fc\u30d3\u30b9 &gt; OAuth\u540c\u610f\u753b\u9762<\/strong>\u300d\u3092\u958b\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u74b0\u5883\u306b\u3088\u3063\u3066\u306f\u300c<strong>Google Auth Platform<\/strong>\u300d\u3068\u3044\u3046\u540d\u524d\u3067\u76f4\u63a5\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u307e\u3060\u672a\u69cb\u6210\u306e\u5834\u5408\u306f\u300c<strong>Google Auth Platform \u306f\u307e\u3060\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u305b\u3093<\/strong>\u300d\u3068\u51fa\u308b\u306e\u3067\u3001\u300c<strong>\u30b9\u30bf\u30fc\u30c8\u30ac\u30a4\u30c9\uff08\u59cb\u3081\u308b\uff09<\/strong>\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u30b9\u30bf\u30fc\u30c8\u30ac\u30a4\u30c9\u304c\u300c\u30a2\u30d7\u30ea\u60c5\u5831 \u2192 \u5bfe\u8c61 \u2192 OAuth\u30af\u30e9\u30a4\u30a2\u30f3\u30c8 \u2192 \u9023\u7d61\u5148\u60c5\u5831\u300d\u3068\u3044\u3046\u6d41\u308c\u306e\u30a6\u30a3\u30b6\u30fc\u30c9\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"812\" height=\"638\" src=\"https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h28_31-812x638.png\" alt=\"Google Auth Platform\u306e\u30b9\u30bf\u30fc\u30c8\u30ac\u30a4\u30c9\u3067\u30a2\u30d7\u30ea\u60c5\u5831\u306a\u3069\u3092\u8a2d\u5b9a\u3059\u308b\u30a6\u30a3\u30b6\u30fc\u30c9\u753b\u9762\u3002\" class=\"wp-image-27894\" srcset=\"https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h28_31-812x638.png 812w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h28_31-382x300.png 382w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h28_31-768x603.png 768w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h28_31.png 924w\" sizes=\"(max-width: 812px) 100vw, 812px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\u30d6\u30e9\u30f3\u30c7\u30a3\u30f3\u30b0\uff08\u30a2\u30d7\u30ea\u60c5\u5831\uff09\u3092\u5165\u529b\u3059\u308b<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u307e\u305a\u30a2\u30d7\u30ea\u306e\u57fa\u672c\u60c5\u5831\uff08\u30d6\u30e9\u30f3\u30c7\u30a3\u30f3\u30b0\uff09\u3092\u5165\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30a2\u30d7\u30ea\u540d<\/strong>\uff1a<code>GSC\u7570\u5e38\u76e3\u8996<\/code> \u306a\u3069\u3002\u3053\u308c\u306f\u8a8d\u8a3c\u6642\u306b\u300c\u25cb\u25cb\u304cGoogle\u30a2\u30ab\u30a6\u30f3\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u6c42\u3081\u3066\u3044\u307e\u3059\u300d\u3068\u8868\u793a\u3055\u308c\u308b\u540d\u524d\u3067\u3059\u3002\u81ea\u5206\u3057\u304b\u4f7f\u308f\u306a\u3044\u306e\u3067\u5206\u304b\u308c\u3070\u4f55\u3067\u3082\u69cb\u3044\u307e\u305b\u3093\u3002<\/li>\n\n\n\n<li><strong>\u30e6\u30fc\u30b6\u30fc\u30b5\u30dd\u30fc\u30c8\u30e1\u30fc\u30eb<\/strong>\uff1a\u81ea\u5206\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u9078\u629e\u3002<\/li>\n\n\n\n<li><strong>\u30c7\u30d9\u30ed\u30c3\u30d1\u30fc\u306e\u9023\u7d61\u5148\u60c5\u5831<\/strong>\uff1a\u540c\u3058\u304f\u81ea\u5206\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3002<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u30ed\u30b4\u3084\u30a2\u30d7\u30ea\u306e\u30c9\u30e1\u30a4\u30f3\u306a\u3069\u306f<strong>\u4efb\u610f\u306a\u306e\u3067\u7a7a\u6b04\u306e\u307e\u307e<\/strong>\u3067\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u81ea\u5206\u3060\u3051\u304c\u4f7f\u3046\u5185\u90e8\u30c4\u30fc\u30eb\u306a\u306e\u3067\u3001\u3053\u3053\u3092\u4f5c\u308a\u8fbc\u3080\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5bfe\u8c61\uff08Audience\uff09\uff1aUser Type \u3092\u9078\u3076<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u6b21\u306b\u300c\u5bfe\u8c61\uff08Audience\uff09\u300d\u3067\u300cUser Type\uff08\u30e6\u30fc\u30b6\u30fc\u306e\u7a2e\u985e\uff09\u300d\u3092\u9078\u3073\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5916\u90e8\uff08External\uff09<\/strong>\uff1a\u500b\u4eba\u306eGoogle\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u904b\u7528\u3059\u308b\u306a\u3089\u3053\u3061\u3089\u3092\u9078\u3073\u307e\u3059\u3002Google Workspace\u306e\u7d44\u7e54\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u3082\u3001\u7d44\u7e54\u5916\u3092\u542b\u3080\u69cb\u6210\u306b\u3059\u308b\u306a\u3089\u3053\u3061\u3089\u3002<\/li>\n\n\n\n<li><strong>\u5185\u90e8\uff08Internal\uff09<\/strong>\uff1aGoogle Workspace\u3092\u4f7f\u3063\u3066\u3044\u3066\u3001\u7d44\u7e54\u5185\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3060\u3051\u3067\u5b8c\u7d50\u3055\u305b\u308b\u5834\u5408\u306b\u9078\u3079\u307e\u3059\u3002\u9078\u3079\u308b\u306a\u3089\u540c\u610f\u753b\u9762\u307e\u308f\u308a\u304c\u30b7\u30f3\u30d7\u30eb\u306b\u306a\u308a\u307e\u3059\u3002<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u500b\u4eba\u5229\u7528\u306a\u3089\u57fa\u672c\u306f\u300c<strong>\u5916\u90e8<\/strong>\u300d\u3067OK\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5bfe\u8c61\uff08Audience\uff09\uff1a\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc\u306b\u81ea\u5206\u3092\u8ffd\u52a0\u3059\u308b<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">User Type\u3067\u300c\u5916\u90e8\u300d\u3092\u9078\u3093\u3060\u5834\u5408\u3001\u30a2\u30d7\u30ea\u306f\u6700\u521d\u300c<strong>\u30c6\u30b9\u30c8<\/strong>\u300d\u3068\u3044\u3046\u516c\u958b\u30b9\u30c6\u30fc\u30bf\u30b9\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30c6\u30b9\u30c8\u30b9\u30c6\u30fc\u30bf\u30b9\u306e\u30a2\u30d7\u30ea\u306f\u3001\u767b\u9332\u3057\u305f\u300c\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc\u300d\u3057\u304b\u8a8d\u8a3c\u3092\u901a\u305b\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u300c\u5bfe\u8c61\u300d\u753b\u9762\u306e\u4e0b\u306e\u307b\u3046\u306b\u3042\u308b\u300c<strong>\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc<\/strong>\u300d\u3067\u300c<strong>Add users\uff08\u30e6\u30fc\u30b6\u30fc\u3092\u8ffd\u52a0\uff09<\/strong>\u300d\u3092\u62bc\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u305d\u3053\u306b<strong>\u3053\u306e\u30c4\u30fc\u30eb\u3092\u52d5\u304b\u3059Google\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9<\/strong>\uff08\uff1d\u3042\u306a\u305f\u81ea\u8eab\uff09\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-border\"><img decoding=\"async\" width=\"812\" height=\"846\" src=\"https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-06-13_15h56_38-812x846.png\" alt=\"\u5bfe\u8c61\u753b\u9762\u306e\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc\u9805\u76ee\u3067\u30c4\u30fc\u30eb\u3092\u5b9f\u884c\u3059\u308bGoogle\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u8ffd\u52a0\u3059\u308b\u624b\u9806\u3002\" class=\"wp-image-27907\" srcset=\"https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-06-13_15h56_38-812x846.png 812w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-06-13_15h56_38-382x398.png 382w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-06-13_15h56_38-768x800.png 768w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-06-13_15h56_38.png 852w\" sizes=\"(max-width: 812px) 100vw, 812px\" \/><\/figure>\n\n\n<p><!-- \u25bc\u4e0a\u306e\u753b\u50cf\u30d6\u30ed\u30c3\u30af\u306b\u3001\u9802\u3044\u305f\u300c\u5bfe\u8c61\uff08Audience\uff09\uff0f\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc\u8ffd\u52a0\u6e08\u307f\u300d\u306e\u30b9\u30af\u30b7\u30e7\uff082026-06-13_15h56_38.png\uff09\u3092\u30e1\u30c7\u30a3\u30a2\u304b\u3089\u633f\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u25bc --><\/p>\n\n\n<p class=\"wp-block-paragraph\">\u3053\u3053\u3092\u5fd8\u308c\u308b\u3068\u3001\u5f8c\u3067GAS\u3092\u5b9f\u884c\u3057\u305f\u3068\u304d\u306b\u8a8d\u8a3c\u304c\u6b62\u307e\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5177\u4f53\u7684\u306b\u306f\u3001\u3053\u3046\u3044\u3046\u753b\u9762\u304c\u51fa\u3066\u5148\u306b\u9032\u3081\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-style-border\"><img decoding=\"async\" width=\"523\" height=\"592\" src=\"https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-06-13_17h18_08.png\" alt=\"\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc\u672a\u8ffd\u52a0\u6642\u306b\u8868\u793a\u3055\u308c\u308b\u3001\u30a2\u30af\u30bb\u30b9\u304c\u30d6\u30ed\u30c3\u30af\u3055\u308c\u305f\u65e8\u306e\u30a8\u30e9\u30fc\u753b\u9762\u3002\" class=\"wp-image-27906\" srcset=\"https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-06-13_17h18_08.png 523w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-06-13_17h18_08-382x432.png 382w\" sizes=\"(max-width: 523px) 100vw, 523px\" \/><\/figure>\n\n\n<p><!-- \u25bc\u4e0a\u306e\u753b\u50cf\u30d6\u30ed\u30c3\u30af\u306b\u3001\u9802\u3044\u305f\u300c\u30a2\u30af\u30bb\u30b9\u3092\u30d6\u30ed\u30c3\u30af \/ 403 access_denied\u300d\u306e\u30b9\u30af\u30b7\u30e7\uff082026-06-13_15h55_29.png\uff09\u3092\u30e1\u30c7\u30a3\u30a2\u304b\u3089\u633f\u5165\u3057\u3066\u304f\u3060\u3055\u3044\u25bc --><\/p>\n\n\n<p class=\"wp-block-paragraph\">\u300c<strong>\u30a2\u30af\u30bb\u30b9\u3092\u30d6\u30ed\u30c3\u30af: \u25cb\u25cb \u306f Google \u306e\u5be9\u67fb\u30d7\u30ed\u30bb\u30b9\u3092\u5b8c\u4e86\u3057\u3066\u3044\u307e\u305b\u3093<\/strong>\u300d\u300c<code>\u30a8\u30e9\u30fc 403: access_denied<\/code>\u300d\u3068\u51fa\u305f\u3089\u3001\u539f\u56e0\u306f\u307b\u307c\u3053\u308c\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u300c\u3053\u306e\u30a2\u30d7\u30ea\u306f\u73fe\u5728\u30c6\u30b9\u30c8\u4e2d\u3067\u3001\u30c7\u30d9\u30ed\u30c3\u30d1\u30fc\u306b\u627f\u8a8d\u3055\u308c\u305f\u30c6\u30b9\u30bf\u30fc\u306e\u307f\u304c\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u300d\u3068\u3044\u3046\u306e\u306f\u3001<strong>\u627f\u8a8d\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u308b\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc\u306b\u5165\u3063\u3066\u3044\u306a\u3044<\/strong>\u3068\u3044\u3046\u610f\u5473\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8907\u6570\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f7f\u3063\u3066\u3044\u308b\u4eba\u304c\u3001\u5225\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u627f\u8a8d\u3057\u3088\u3046\u3068\u3057\u3066\u8a70\u307e\u308b\u306e\u3082\u540c\u3058\u539f\u56e0\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u81ea\u5206\u81ea\u8eab\u3092\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc\u306b\u5165\u308c\u308b\u2500\u2500\u3053\u308c\u3092\u5fc5\u305a\u3084\u3063\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>\u88dc\u8db3\uff1a\u300c\u516c\u958b\u300d\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u81ea\u5206\u3060\u3051\u304c\u4f7f\u3046\u30c4\u30fc\u30eb\u306a\u306e\u3067\u3001\u30a2\u30d7\u30ea\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u306f\u300c\u30c6\u30b9\u30c8\u300d\u306e\u307e\u307e\u3067\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u300c\u30a2\u30d7\u30ea\u3092\u516c\u958b\u300d\u30dc\u30bf\u30f3\u3092\u62bc\u3059\u3068Google\u306e\u5be9\u67fb\u5bfe\u8c61\u306b\u306a\u308a\u5f97\u308b\u306e\u3067\u3001<strong>\u62bc\u3055\u306a\u3044\u3067\u304f\u3060\u3055\u3044<\/strong>\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc\u306b\u81ea\u5206\u3092\u5165\u308c\u3066\u3042\u308c\u3070\u3001\u30c6\u30b9\u30c8\u30b9\u30c6\u30fc\u30bf\u30b9\u306e\u307e\u307e\u904b\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">\u30c7\u30fc\u30bf\u30a2\u30af\u30bb\u30b9\uff08\u30b9\u30b3\u30fc\u30d7\uff09\u306f\u3001\u3053\u3053\u3067\u306f\u89e6\u3089\u306a\u304f\u3066\u3088\u3044<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u300c\u30c7\u30fc\u30bf\u30a2\u30af\u30bb\u30b9\u300d\u307e\u305f\u306f\u300c\u30b9\u30b3\u30fc\u30d7\u300d\u306e\u753b\u9762\u304c\u51fa\u305f\u3089\u3001\u3053\u3053\u306f<strong>\u4f55\u3082\u8ffd\u52a0\u305b\u305a<\/strong>\u306b\u9032\u3081\u3066\u69cb\u3044\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u610f\u5916\u306b\u601d\u3046\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001\u3053\u306e\u30c4\u30fc\u30eb\u304c\u4f7f\u3046\u30b9\u30b3\u30fc\u30d7\uff08\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u306e\u7bc4\u56f2\uff09\u306f\u3001\u540c\u610f\u753b\u9762\u5074\u3067\u306f\u306a\u304f<strong>\u5f8c\u8ff0\u3059\u308b <code>appsscript.json<\/code> \u306e\u5074\u3067\u5ba3\u8a00\u3057\u307e\u3059<\/strong>\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u305d\u3057\u3066\u5b9f\u969b\u306e\u540c\u610f\u306f\u3001GAS\u3092\u521d\u3081\u3066\u5b9f\u884c\u3059\u308b\u3068\u304d\u306b\u300c\u3053\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u306f\u3053\u3046\u3044\u3046\u6a29\u9650\u304c\u5fc5\u8981\u3067\u3059\u300d\u3068\u3044\u3046\u5f62\u3067\u307e\u3068\u3081\u3066\u884c\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u3053\u3067\u4f55\u304b\u8ffd\u52a0\u3057\u3088\u3046\u3068\u3057\u3066\u624b\u304c\u6b62\u307e\u308a\u304c\u3061\u3067\u3059\u304c\u3001<strong>\u540c\u610f\u753b\u9762\u5074\u306e\u30b9\u30b3\u30fc\u30d7\u306f\u30b9\u30eb\u30fc\u3067\u6b63\u89e3<\/strong>\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u300c\u30b9\u30b3\u30fc\u30d7\u306f <code>appsscript.json<\/code> \u3067\u5ba3\u8a00\u3059\u308b\u300d\u2500\u2500\u3053\u306e\u4e00\u70b9\u3060\u3051\u3001\u982d\u306e\u7247\u9685\u306b\u7f6e\u3044\u3066\u5148\u3078\u9032\u3093\u3067\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u30b9\u30c6\u30c3\u30d74\uff1aOAuth\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\uff08\u8a8d\u8a3c\u60c5\u5831\uff09\u3092\u4f5c\u6210\u3059\u308b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u65b0\u3057\u3044Google Auth Platform\u3067\u306f\u3001\u540c\u610f\u753b\u9762\u306e\u69cb\u6210\u3092\u5b8c\u4e86\u3055\u305b\u308b\u305f\u3081\u306b<strong>OAuth\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\uff08\u8a8d\u8a3c\u60c5\u5831\uff09\u306e\u4f5c\u6210<\/strong>\u304c\u6c42\u3081\u3089\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30b9\u30bf\u30fc\u30c8\u30ac\u30a4\u30c9\u306e\u30a6\u30a3\u30b6\u30fc\u30c9\u3092\u9032\u3081\u3066\u3044\u308b\u3068\u3001\u300cOAuth\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u300d\u306e\u30b9\u30c6\u30c3\u30d7\u304c\u51fa\u3066\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3042\u308b\u3044\u306f\u5de6\u30e1\u30cb\u30e5\u30fc\u306e\u300c<strong>\u30af\u30e9\u30a4\u30a2\u30f3\u30c8<\/strong>\u300d\u304b\u3089\u300c<strong>\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u4f5c\u6210<\/strong>\u300d\u3067\u4f5c\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u300c\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u7a2e\u985e\u300d\u3092\u805e\u304b\u308c\u305f\u3089\u3001\u500b\u4eba\u30c4\u30fc\u30eb\u306a\u3089\u300c<strong>\u30a6\u30a7\u30d6 \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/strong>\u300d\u307e\u305f\u306f\u300c<strong>\u30c7\u30b9\u30af\u30c8\u30c3\u30d7<\/strong>\u300d\u306e\u3069\u3061\u3089\u304b\u3092\u9078\u3093\u3067\u304a\u3051\u3070\u69cb\u6210\u306f\u5b8c\u4e86\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u540d\u524d\u306f <code>gsc-monitor-client<\/code> \u306a\u3069\u5206\u304b\u308b\u3082\u306e\u3067OK\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u300c\u4f5c\u6210\u300d\u3092\u62bc\u3059\u3068\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8ID\u3068\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u304c\u767a\u884c\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"is-style-icon_good wp-block-paragraph\">\u3053\u3053\u304c\u30dd\u30a4\u30f3\u30c8\uff1a\u3053\u306e\u30c4\u30fc\u30eb\u306f\u3001\u3044\u307e\u4f5c\u3063\u305f\u30af\u30e9\u30a4\u30a2\u30f3\u30c8ID\u3092\u30b3\u30fc\u30c9\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u4f7f\u3046\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"is-style-icon_good wp-block-paragraph\">\u5b9f\u969b\u306e\u8a8d\u8a3c\u306f\u3001\u5f8c\u3067\u300cGAS\u30d7\u30ed\u30b8\u30a7\u30af\u30c8 \u2194 GCP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u300d\u3092\u756a\u53f7\u3067\u7d10\u4ed8\u3051\u3001<code>ScriptApp.getOAuthToken()<\/code> \u3068 <code>appsscript.json<\/code> \u306e\u30b9\u30b3\u30fc\u30d7\u5ba3\u8a00\u3092\u901a\u3057\u3066\u884c\u308f\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"is-style-icon_good wp-block-paragraph\">\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u4f5c\u6210\u306f\u3001\u3042\u304f\u307e\u3067\u300c\u540c\u610f\u753b\u9762\uff08Auth Platform\uff09\u306e\u69cb\u6210\u3092\u5b8c\u4e86\u3055\u305b\u308b\u305f\u3081\u306e\u4e00\u624b\u9806\u300d\u3068\u6349\u3048\u3066\u304a\u3051\u3070\u5927\u4e08\u592b\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u306f\u4f5c\u6210\u6642\u306b\u3057\u304b\u8868\u793a\u3055\u308c\u306a\u3044\u4ed5\u69d8\u3067\u3059\u304c\u3001\u3053\u306e\u30c4\u30fc\u30eb\u3067\u306f\u30b3\u30fc\u30c9\u306b\u57cb\u3081\u8fbc\u307e\u306a\u3044\u306e\u3067\u3001\u63a7\u3048\u640d\u306d\u3066\u3082\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3067\u300c\u540c\u610f\u753b\u9762\u306e\u69cb\u6210\u300d\u3068\u300c\u8a8d\u8a3c\u60c5\u5831\u306e\u4f5c\u6210\u300d\u304c\u5b8c\u4e86\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u30b9\u30c6\u30c3\u30d75\uff1aGAS\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u308a\u3001\u30b3\u30fc\u30c9\u3092\u8cbc\u308b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u3053\u304b\u3089GAS\u5074\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/script.google.com\/\">script.google.com<\/a> \u3092\u958b\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>GCP\u3068\u540c\u3058Google\u30a2\u30ab\u30a6\u30f3\u30c8<\/strong>\u3067\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u3001\u300c<strong>\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/strong>\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30a8\u30c7\u30a3\u30bf\u304c\u958b\u3044\u305f\u3089\u3001\u6700\u521d\u304b\u3089\u3042\u308b <code>myFunction<\/code> \u306e\u3072\u306a\u5f62\u3092\u542b\u3081\u3066<strong>\u4e2d\u8eab\u3092\u5168\u90e8\u524a\u9664<\/strong>\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u305d\u3053\u306b\u3001\u7121\u6599\u30d1\u30fc\u30c8\u3067\u914d\u5e03\u3057\u305f\u30b3\u30fc\u30c9\uff08<code>\u30b3\u30fc\u30c9.gs<\/code>\uff09\u3092<strong>\u4e38\u3054\u3068\u8cbc\u308a\u4ed8\u3051<\/strong>\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8cbc\u308a\u7d42\u3048\u305f\u3089\u3001\u5de6\u4e0a\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\uff08\u300c\u7121\u984c\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u300d\uff09\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u3001<code>GSC\u7570\u5e38\u76e3\u8996<\/code> \u306a\u3069\u5206\u304b\u308a\u3084\u3059\u3044\u540d\u524d\u306b\u5909\u66f4\u3057\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30d5\u30ed\u30c3\u30d4\u30fc\u30c7\u30a3\u30b9\u30af\u306e\u30a2\u30a4\u30b3\u30f3\u3001\u307e\u305f\u306f <code>Ctrl + S<\/code>\uff08Mac\u306f <code>Cmd + S<\/code>\uff09\u3067\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u6642\u70b9\u3067\u306f\u307e\u3060\u5b9f\u884c\u3057\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5148\u306b\u30b9\u30b3\u30fc\u30d7\u5ba3\u8a00\u30fbGCP\u3068\u306e\u7d10\u4ed8\u3051\u30fb\u8a2d\u5b9a\u306e\u8a18\u5165\u3092\u6e08\u307e\u305b\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">SITES\u914d\u5217\u3092\u81ea\u5206\u306e\u30b5\u30a4\u30c8\u306b\u66f8\u304d\u63db\u3048\u308b<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u30b3\u30fc\u30c9\u4e0a\u90e8\u306e <code>SITES<\/code> \u914d\u5217\u3092\u3001\u81ea\u5206\u306e\u76e3\u8996\u3057\u305f\u3044\u30b5\u30a4\u30c8\u306b\u66f8\u304d\u63db\u3048\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const SITES = &#91;\n  {\n    name: '\u30b5\u30a4\u30c8A',\n    property: 'sc-domain:example.com',\n    sampleUrls: &#91;'https:\/\/example.com\/'],\n  },\n];\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>property<\/code> \u306f\u30b5\u30c1\u30b3\u306e\u300c\u30d7\u30ed\u30d1\u30c6\u30a3\u300d\u6587\u5b57\u5217\u3092<strong>\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u901a\u308a\u306b<\/strong>\u5165\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c9\u30e1\u30a4\u30f3\u30d7\u30ed\u30d1\u30c6\u30a3\u306a\u3089 <code>sc-domain:example.com<\/code><\/li>\n\n\n\n<li>URL\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u578b\u306a\u3089 <code>https:\/\/example.com\/<\/code>\uff08\u672b\u5c3e\u30b9\u30e9\u30c3\u30b7\u30e5\u5fc5\u9808\uff09<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u81ea\u5206\u304c\u3069\u3061\u3089\u306e\u30bf\u30a4\u30d7\u3067\u767b\u9332\u3057\u3066\u3044\u308b\u304b\u306f\u3001\u30b5\u30c1\u30b3\u306e\u753b\u9762\u5de6\u4e0a\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u9078\u629e\u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u3053\u306e\u8868\u8a18\u304c\u30b5\u30c1\u30b3\u306e\u767b\u9332\u30681\u6587\u5b57\u3067\u3082\u9055\u3046\u3068\u30c7\u30fc\u30bf\u304c\u53d6\u5f97\u3067\u304d\u306a\u3044\u306e\u3067\u3001\u30b3\u30d4\u30da\u3067\u6b63\u78ba\u306b\u5165\u308c\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u30b9\u30c6\u30c3\u30d76\uff1aappsscript.json \u306bOAuth\u30b9\u30b3\u30fc\u30d7\u3092\u5ba3\u8a00\u3059\u308b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u3053\u306e\u8a18\u4e8b\u3067\u4e00\u756a\u30cf\u30de\u308a\u3084\u3059\u3044\u3001\u96a0\u308c\u305f\u5fc5\u9808\u30b9\u30c6\u30c3\u30d7\u3067\u3059\u3002<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u7d50\u8ad6\u304b\u3089\u8a00\u3046\u3068\u3001<code>appsscript.json<\/code> \u306b\u5fc5\u8981\u306a\u30b9\u30b3\u30fc\u30d7\u3092\u624b\u3067\u66f8\u304b\u306a\u3044\u3068\u3001\u30b3\u30fc\u30c9\u304c\u6b63\u3057\u304f\u3066\u3082 <code>403<\/code> \u3067\u843d\u3061\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u7406\u7531\u3092\u7c21\u5358\u306b\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GAS\u306f\u666e\u6bb5\u3001\u30b3\u30fc\u30c9\u3092\u8aad\u3093\u3067\u300c\u3053\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u306b\u306f\u3069\u3093\u306a\u6a29\u9650\uff08\u30b9\u30b3\u30fc\u30d7\uff09\u304c\u5fc5\u8981\u304b\u300d\u3092\u81ea\u52d5\u3067\u5224\u65ad\u3057\u3066\u304f\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3068\u3053\u308d\u304c\u4eca\u56de\u306f\u3001Search Console API\u3092 <code>UrlFetchApp<\/code> \u3067<strong>\u76f4\u63a5<\/strong>\u53e9\u3044\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GAS\u304b\u3089\u898b\u3048\u308b\u306e\u306f\u300c\u5916\u90e8\u306bHTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u3063\u3066\u3044\u308b\u300d\u3053\u3068\u3060\u3051\u3067\u3001\u305d\u306e\u9001\u308a\u5148\u304cSearch Console API\u3060\u3068\u307e\u3067\u306f\u5224\u65ad\u3067\u304d\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u305d\u306e\u305f\u3081Search Console\u3092\u8aad\u3080\u6a29\u9650\uff08<code>webmasters.readonly<\/code>\uff09\u304c\u81ea\u52d5\u3067\u306f\u4ed8\u4e0e\u3055\u308c\u305a\u3001<code>ScriptApp.getOAuthToken()<\/code> \u304c\u8fd4\u3059\u30c8\u30fc\u30af\u30f3\u306b\u3082\u305d\u306e\u6a29\u9650\u304c\u542b\u307e\u308c\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u7d50\u679c\u3001\u6a29\u9650\u306e\u8db3\u308a\u306a\u3044\u30c8\u30fc\u30af\u30f3\u3067API\u3092\u53e9\u304f\u3053\u3068\u306b\u306a\u308a\u3001<code>403<\/code> \u304c\u8fd4\u3063\u3066\u304f\u308b\u3001\u3068\u3044\u3046\u308f\u3051\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3092\u9632\u3050\u305f\u3081\u306b\u3001<code>appsscript.json<\/code> \u306b\u5fc5\u8981\u306a\u30b9\u30b3\u30fc\u30d7\u3092<strong>\u81ea\u5206\u3067\u5ba3\u8a00<\/strong>\u3057\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">appsscript.json \u3092\u8868\u793a\u3059\u308b<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>appsscript.json<\/code>\uff08\u30de\u30cb\u30d5\u30a7\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\uff09\u306f\u3001\u521d\u671f\u72b6\u614b\u3067\u306f\u30a8\u30c7\u30a3\u30bf\u306b\u8868\u793a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GAS\u30a8\u30c7\u30a3\u30bf\u5de6\u30e1\u30cb\u30e5\u30fc\u306e\u6b6f\u8eca\u30a2\u30a4\u30b3\u30f3\u300c<strong>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a<\/strong>\u300d\u3092\u958b\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u300c<strong>\u300cappsscript.json\u300d\u30de\u30cb\u30d5\u30a7\u30b9\u30c8 \u30d5\u30a1\u30a4\u30eb\u3092\u30a8\u30c7\u30a3\u30bf\u3067\u8868\u793a\u3059\u308b<\/strong>\u300d\u306b\u30c1\u30a7\u30c3\u30af\u3092\u5165\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30a8\u30c7\u30a3\u30bf\u306b\u623b\u308b\u3068\u3001\u5de6\u306e\u30d5\u30a1\u30a4\u30eb\u4e00\u89a7\u306b <code>appsscript.json<\/code> \u304c\u73fe\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u30b9\u30b3\u30fc\u30d7\u3092\u66f8\u304d\u8fbc\u3080<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>appsscript.json<\/code> \u3092\u958b\u304d\u3001\u4e2d\u8eab\u3092\u6b21\u306e\u5185\u5bb9\u306b\u5dee\u3057\u66ff\u3048\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>{\n  &quot;timeZone&quot;: &quot;Asia\/Tokyo&quot;,\n  &quot;dependencies&quot;: {},\n  &quot;exceptionLogging&quot;: &quot;STACKDRIVER&quot;,\n  &quot;runtimeVersion&quot;: &quot;V8&quot;,\n  &quot;oauthScopes&quot;: [\n    &quot;https:\/\/www.googleapis.com\/auth\/webmasters.readonly&quot;,\n    &quot;https:\/\/www.googleapis.com\/auth\/script.external_request&quot;,\n    &quot;https:\/\/www.googleapis.com\/auth\/spreadsheets&quot;\n  ]\n}\n<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u5404\u30b9\u30b3\u30fc\u30d7\u306e\u610f\u5473\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>webmasters.readonly<\/code>\uff1aSearch Console\uff08\u30b5\u30c1\u30b3\uff09\u306e\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u53d6\u308b\u305f\u3081\u306e\u6a29\u9650\u3002\u3053\u308c\u304c\u7121\u3044\u3068 <code>403<\/code> \u306b\u306a\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><code>script.external_request<\/code>\uff1a<code>UrlFetchApp<\/code> \u3067\u5916\u90e8\u306b\u901a\u4fe1\u3059\u308b\u305f\u3081\u306e\u6a29\u9650\u3002Search Console API\u306e\u76f4\u53e9\u304d\u306b\u3082\u3001Slack\u3078\u306e\u901a\u77e5\u306b\u3082\u5fc5\u8981\u3067\u3059\u3002<\/li>\n\n\n\n<li><code>spreadsheets<\/code>\uff1a\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u3092\u8aad\u307f\u66f8\u304d\u3059\u308b\u6a29\u9650\u3002<strong>\u3053\u306e\u30c4\u30fc\u30eb\u5358\u4f53\u3067\u306f\u4f7f\u3044\u307e\u305b\u3093<\/strong>\u304c\u3001\u5f8c\u3067\u30ed\u30b0\u3092\u30b7\u30fc\u30c8\u306b\u6b8b\u3059\u306a\u3069\u62e1\u5f35\u3059\u308b\u4f59\u5730\u3092\u898b\u3066\u5165\u308c\u3066\u3042\u308a\u307e\u3059\u3002\u4e0d\u8981\u306a\u30891\u884c\u524a\u9664\u3057\u3066OK\u3067\u3059\u3002<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u66f8\u304d\u63db\u3048\u305f\u3089\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u30b9\u30b3\u30fc\u30d7\u5ba3\u8a00\u304c\u3001\u5f8c\u306e\u30b9\u30c6\u30c3\u30d710\u300c\u6a29\u9650\u627f\u8a8d\u300d\u306e\u753b\u9762\u306b\u51fa\u3066\u304f\u308b\u6a29\u9650\u4e00\u89a7\u306e\u5143\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>\u3064\u307e\u305a\u304d\u30dd\u30a4\u30f3\u30c8<\/strong>\uff1a\u3059\u3067\u306b\u4e00\u5ea6\u30b3\u30fc\u30c9\u3092\u5b9f\u884c\u3057\u3066\u6a29\u9650\u627f\u8a8d\u307e\u3067\u6e08\u307e\u305b\u305f\u3042\u3068\u3067 <code>oauthScopes<\/code> \u3092\u8db3\u3057\u305f\u5834\u5408\u3001\u8ffd\u52a0\u3057\u305f\u30b9\u30b3\u30fc\u30d7\u306f\u300c\u518d\u627f\u8a8d\u300d\u3057\u306a\u3044\u3068\u6709\u52b9\u306b\u306a\u308a\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30b9\u30b3\u30fc\u30d7\u3092\u8db3\u3057\u305f\u306e\u306b <code>403<\/code> \u304c\u6d88\u3048\u306a\u3044\u3068\u304d\u306f\u3001\u3082\u3046\u4e00\u5ea6 <code>checkNow<\/code> \u3092\u624b\u52d5\u5b9f\u884c\u3057\u3066\u3001\u65b0\u3057\u3044\u6a29\u9650\u306e\u627f\u8a8d\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u901a\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">\u30b9\u30c6\u30c3\u30d77\uff1aGAS\u3068GCP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u7d10\u4ed8\u3051\u308b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u3053\u3053\u3092\u98db\u3070\u3059\u3068\u3001\u30b3\u30fc\u30c9\u304c\u6b63\u3057\u304f\u3066\u3082API\u304c\u901a\u308a\u307e\u305b\u3093\u3002<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GAS\u30a8\u30c7\u30a3\u30bf\u306e\u5de6\u30e1\u30cb\u30e5\u30fc\u304b\u3089\u3001\u6b6f\u8eca\u30a2\u30a4\u30b3\u30f3\u306e\u300c<strong>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a<\/strong>\u300d\u3092\u958b\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0b\u306e\u307b\u3046\u306b\u30b9\u30af\u30ed\u30fc\u30eb\u3059\u308b\u3068\u300c<strong>Google Cloud Platform\uff08GCP\uff09\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/strong>\u300d\u3068\u3044\u3046\u30bb\u30af\u30b7\u30e7\u30f3\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u521d\u671f\u72b6\u614b\u3067\u306f\u300c\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u300d\u304c\u7d10\u4ed8\u3044\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u81ea\u5206\u3067API\u3092\u6709\u52b9\u5316\u3057\u305f\u308a\u3067\u304d\u306a\u3044\u305f\u3081\u3001\u30b9\u30c6\u30c3\u30d71\u3067\u4f5c\u3063\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5207\u308a\u66ff\u3048\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u300c<strong>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u5909\u66f4<\/strong>\u300d\u30dc\u30bf\u30f3\u3092\u62bc\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u300cGCP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u756a\u53f7\u300d\u306e\u5165\u529b\u6b04\u304c\u51fa\u308b\u306e\u3067\u3001<strong>\u30b9\u30c6\u30c3\u30d71\u3067\u63a7\u3048\u3066\u304a\u3044\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u756a\u53f7<\/strong>\uff0812\u6841\u524d\u5f8c\u306e\u6570\u5b57\uff09\u3092\u5165\u529b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8ID\uff08\u6587\u5b57\u5217\uff09\u3067\u306f\u306a\u304f<strong>\u756a\u53f7\uff08\u6570\u5b57\uff09<\/strong>\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u3053\u3092\u53d6\u308a\u9055\u3048\u308b\u4eba\u304c\u591a\u3044\u306e\u3067\u6ce8\u610f\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u300c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8a2d\u5b9a\u300d\u3092\u62bc\u3057\u3066\u3001\u30a8\u30e9\u30fc\u304c\u51fa\u306a\u3051\u308c\u3070\u7d10\u4ed8\u3051\u5b8c\u4e86\u3067\u3059\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>\u3046\u307e\u304f\u3044\u304b\u306a\u3044\u3068\u304d<\/strong>\uff1a\u300c\u756a\u53f7\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u300d\u300c\u6a29\u9650\u304c\u306a\u3044\u300d\u3068\u8a00\u308f\u308c\u308b\u5834\u5408\u3001\u305f\u3044\u3066\u3044\u306f\u2460\u756a\u53f7\u306e\u6253\u3061\u9593\u9055\u3044\u3001\u2461GAS\u3068GCP\u3067\u30ed\u30b0\u30a4\u30f3\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u9055\u3046\u3001\u2462\u305d\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u304cGCP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u6a29\u9650\u3092\u6301\u3063\u3066\u3044\u306a\u3044\u3001\u306e\u3069\u308c\u304b\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30b9\u30c6\u30c3\u30d71\u301c2\u3092\u540c\u3058\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u3084\u3063\u305f\u304b\u3001\u3082\u3046\u4e00\u5ea6\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3067\u300cGAS\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u300d\u3068\u300cSearch Console API\u3092\u6709\u52b9\u5316\u3057\u305fGCP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u300d\u304c\u7d50\u3073\u3064\u304d\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GAS\u304cAPI\u3092\u53e9\u3044\u305f\u3068\u304d\u306b\u3001\u30b9\u30c6\u30c3\u30d72\u3067\u6709\u52b9\u5316\u3057\u305fAPI\u3068\u3001\u30b9\u30c6\u30c3\u30d73\u3067\u69cb\u6210\u3057\u305f\u540c\u610f\u753b\u9762\u3001\u30b9\u30c6\u30c3\u30d76\u3067\u5ba3\u8a00\u3057\u305f\u30b9\u30b3\u30fc\u30d7\u304c\u4f7f\u308f\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u30b9\u30c6\u30c3\u30d78\uff1a\u30b9\u30af\u30ea\u30d7\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u30bb\u30c3\u30c8\u3059\u308b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u6b21\u306b\u3001Slack\u901a\u77e5\u306b\u5fc5\u8981\u306a\u60c5\u5831\u3092GAS\u306b\u767b\u9332\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30b3\u30fc\u30c9\u306b\u76f4\u63a5\u66f8\u304b\u305a\u3001<strong>\u30b9\u30af\u30ea\u30d7\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3<\/strong>\u306b\u4fdd\u5b58\u3059\u308b\u306e\u304c\u30bb\u30aa\u30ea\u30fc\u3067\u3059\uff08\u30b3\u30fc\u30c9\u3092\u8ab0\u304b\u306b\u5171\u6709\u3057\u3066\u3082\u30c8\u30fc\u30af\u30f3\u304c\u6f0f\u308c\u307e\u305b\u3093\uff09\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GAS\u30a8\u30c7\u30a3\u30bf\u306e\u300c<strong>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a<\/strong>\u300d\uff08\u30b9\u30c6\u30c3\u30d77\u3068\u540c\u3058\u753b\u9762\uff09\u3092\u958b\u304d\u3001\u4e00\u756a\u4e0b\u307e\u3067\u30b9\u30af\u30ed\u30fc\u30eb\u3059\u308b\u3068\u300c<strong>\u30b9\u30af\u30ea\u30d7\u30c8 \u30d7\u30ed\u30d1\u30c6\u30a3<\/strong>\u300d\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u300c<strong>\u30b9\u30af\u30ea\u30d7\u30c8 \u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u8ffd\u52a0<\/strong>\u300d\u3092\u62bc\u3057\u3066\u3001\u6b21\u306e2\u3064\u3092\u767b\u9332\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5024\u306f\u6b21\u306e\u30b9\u30c6\u30c3\u30d79\u3067Slack\u304b\u3089\u53d6\u5f97\u3059\u308b\u306e\u3067\u3001<strong>\u3044\u3063\u305f\u3093\u3053\u306e\u753b\u9762\u306e\u5834\u6240\u3060\u3051\u78ba\u8a8d\u3057\u3066\u3001\u30b9\u30c6\u30c3\u30d79\u306e\u3042\u3068\u623b\u3063\u3066\u304d\u3066\u5165\u529b<\/strong>\u3057\u3066\u3082\u69cb\u3044\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u30d7\u30ed\u30d1\u30c6\u30a3<\/th><th>\u5024<\/th><\/tr><\/thead><tbody><tr><td><code>SLACK_BOT_TOKEN<\/code><\/td><td>Slack\u30a2\u30d7\u30ea\u306e Bot User OAuth Token\uff08<code>xoxb-<\/code> \u3067\u59cb\u307e\u308b\u6587\u5b57\u5217\uff09<\/td><\/tr><tr><td><code>SLACK_CHANNEL<\/code><\/td><td>\u901a\u77e5\u5148\u30c1\u30e3\u30f3\u30cd\u30eb\uff08<code>#seo-alert<\/code> \u306e\u3088\u3046\u306a\u540d\u524d\u3001\u307e\u305f\u306f\u30c1\u30e3\u30f3\u30cd\u30ebID <code>C0XXXXXXX<\/code>\uff09<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u30d7\u30ed\u30d1\u30c6\u30a3\u540d\uff08\u5de6\u5074\uff09\u306f<strong>\u30b9\u30da\u30eb\u3092\u6b63\u78ba\u306b<\/strong>\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30b3\u30fc\u30c9\u306f\u3053\u306e\u540d\u524d\u3067\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u8aad\u307f\u306b\u884c\u304f\u306e\u3067\u3001<code>SLACK_BOT_TOKEN<\/code> \u304c <code>SLACK_TOKEN<\/code> \u306b\u306a\u3063\u3066\u3044\u308b\u3060\u3051\u3067\u52d5\u304d\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5165\u529b\u3057\u305f\u3089\u300c<strong>\u30b9\u30af\u30ea\u30d7\u30c8 \u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u4fdd\u5b58<\/strong>\u300d\u3092\u62bc\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-border\"><img decoding=\"async\" width=\"812\" height=\"796\" src=\"https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h29_18-812x796.png\" alt=\"GAS\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u5165\u529b\u3057\u3066\u4fdd\u5b58\u3059\u308b\u753b\u9762\u3002\" class=\"wp-image-27895\" srcset=\"https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h29_18-812x796.png 812w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h29_18-382x374.png 382w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h29_18-768x753.png 768w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h29_18.png 908w\" sizes=\"(max-width: 812px) 100vw, 812px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u30b9\u30c6\u30c3\u30d79\uff1aSlack\u30a2\u30d7\u30ea\u3092\u7528\u610f\u3057\u3066Bot\u3092\u62db\u5f85\u3059\u308b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u30b9\u30c6\u30c3\u30d78\u3067\u5fc5\u8981\u306b\u306a\u308bSlack\u306e2\u3064\u306e\u5024\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Slack\u30a2\u30d7\u30ea\u3092\u307e\u3060\u6301\u3063\u3066\u3044\u306a\u3044\u524d\u63d0\u3067\u9032\u3081\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Slack\u30a2\u30d7\u30ea\u3092\u4f5c\u308b<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/api.slack.com\/apps\">api.slack.com\/apps<\/a> \u3092\u958b\u304d\u3001\u300c<strong>Create New App<\/strong>\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u300c<strong>From scratch<\/strong>\u300d\u3092\u9078\u3073\u3001\u30a2\u30d7\u30ea\u540d\uff08<code>GSC Monitor<\/code> \u306a\u3069\uff09\u3068\u3001\u901a\u77e5\u3092\u9001\u308a\u305f\u3044\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u9078\u629e\u3057\u3066\u300c<strong>Create App<\/strong>\u300d\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">chat:write \u6a29\u9650\u3092\u4ed8\u4e0e\u3059\u308b<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u30a2\u30d7\u30ea\u306e\u7ba1\u7406\u753b\u9762\u5de6\u30e1\u30cb\u30e5\u30fc\u304b\u3089\u300c<strong>OAuth &amp; Permissions<\/strong>\u300d\u3092\u958b\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0b\u306b\u30b9\u30af\u30ed\u30fc\u30eb\u3057\u3066\u300c<strong>Scopes<\/strong>\u300d\u30bb\u30af\u30b7\u30e7\u30f3\u306e\u300c<strong>Bot Token Scopes<\/strong>\u300d\u3067\u300c<strong>Add an OAuth Scope<\/strong>\u300d\u3092\u62bc\u3057\u3001\u300c<strong><code>chat:write<\/code><\/strong>\u300d\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u304c\u30e1\u30c3\u30bb\u30fc\u30b8\u6295\u7a3f\u306b\u5fc5\u8981\u306a\u6700\u5c0f\u9650\u306e\u6a29\u9650\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u30c8\u30fc\u30af\u30f3\u3092\u53d6\u5f97<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u540c\u3058\u300cOAuth &amp; Permissions\u300d\u753b\u9762\u306e\u4e0a\u90e8\u306b\u623b\u308a\u3001\u300c<strong>Install to Workspace<\/strong>\u300d\uff08\u307e\u305f\u306f Install to \uff5e\uff09\u3092\u62bc\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u78ba\u8a8d\u753b\u9762\u3067\u300c\u8a31\u53ef\u3059\u308b\u300d\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u5b8c\u4e86\u3059\u308b\u3068\u3001\u300c<strong>Bot User OAuth Token<\/strong>\u300d\u3068\u3057\u3066 <code>xoxb-<\/code> \u3067\u59cb\u307e\u308b\u6587\u5b57\u5217\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u3053\u308c\u304c <code>SLACK_BOT_TOKEN<\/code> \u306e\u5024<\/strong>\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30b3\u30d4\u30fc\u3057\u3066\u3001\u30b9\u30c6\u30c3\u30d78\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3\u306b\u8cbc\u308a\u4ed8\u3051\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Bot\u3092\u901a\u77e5\u5148\u30c1\u30e3\u30f3\u30cd\u30eb\u306b\u62db\u5f85\u3059\u308b<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u6700\u5f8c\u306b\u3001Slack\u672c\u4f53\uff08\u30a2\u30d7\u30ea\uff09\u3067\u901a\u77e5\u3092\u9001\u308a\u305f\u3044\u30c1\u30e3\u30f3\u30cd\u30eb\u3092\u958b\u304d\u3001\u30e1\u30c3\u30bb\u30fc\u30b8\u6b04\u306b\u6b21\u306e\u3088\u3046\u306b\u6253\u3061\u8fbc\u307f\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/invite @GSC Monitor\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uff08<code>@<\/code> \u306e\u3042\u3068\u306f\u30b9\u30c6\u30c3\u30d79\u3067\u4ed8\u3051\u305f\u30a2\u30d7\u30ea\u540d\uff09<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3067Bot\u304c\u30c1\u30e3\u30f3\u30cd\u30eb\u306b\u53c2\u52a0\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u3053\u306e\u62db\u5f85\u3092\u5fd8\u308c\u308b\u3068\u3001\u30c8\u30fc\u30af\u30f3\u304c\u6b63\u3057\u304f\u3066\u3082\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u6295\u7a3f\u3067\u304d\u307e\u305b\u3093<\/strong>\uff08<code>not_in_channel<\/code> \u3068\u3044\u3046\u30a8\u30e9\u30fc\u306b\u306a\u308a\u307e\u3059\uff09\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>SLACK_CHANNEL<\/code> \u306e\u5024\u306b\u306f\u3001\u3053\u306e\u30c1\u30e3\u30f3\u30cd\u30eb\u540d\u3092 <code>#<\/code> \u8fbc\u307f\u3067\uff08\u4f8b\uff1a<code>#seo-alert<\/code>\uff09\u5165\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30c1\u30e3\u30f3\u30cd\u30ebID\u3067\u3082\u69cb\u3044\u307e\u305b\u3093\uff08\u30c1\u30e3\u30f3\u30cd\u30eb\u540d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u958b\u304f\u8a73\u7d30\u306e\u4e00\u756a\u4e0b\u306b\u3042\u308a\u307e\u3059\uff09\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u3053\u307e\u3067\u3067\u3001\u30b9\u30c6\u30c3\u30d78\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u30d7\u30ed\u30d1\u30c6\u30a32\u3064\u304c\u4e21\u65b9\u3068\u3082\u57cb\u307e\u3063\u3066\u3044\u308b\u306f\u305a\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u57cb\u307e\u3063\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b9f\u969b\u306eGAS<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large is-style-border\"><img decoding=\"async\" width=\"812\" height=\"416\" src=\"https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h36_35-812x416.png\" alt=\"2\u3064\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u753b\u9762\u3002\" class=\"wp-image-27899\" srcset=\"https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h36_35-812x416.png 812w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h36_35-382x195.png 382w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h36_35-768x393.png 768w, https:\/\/motoki-design.co.jp\/wordpress\/wp-content\/uploads\/2026-05-25_17h36_35.png 924w\" sizes=\"(max-width: 812px) 100vw, 812px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee5\u4e0b\u3001\u5b9f\u969b\u306e\u30b3\u30fc\u30c9\u3067\u3059\u3002<\/p>\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>\n\/**\n   * ============================================================\n   *  GSC \u7570\u5e38\u76e3\u8996\u30c4\u30fc\u30eb  (Google Apps Script)\n   * ============================================================\n *  \u6bce\u9031\u6708\u66dc8\u6642\u306b\u8907\u6570\u30b5\u30a4\u30c8\u306e Search Console \u3092\u5206\u6790\u3057\u3001\n *  \u30ea\u30e9\u30a4\u30c8\u5019\u88dc\u30fb\u691c\u7d22\u6d41\u5165\u306e\u843d\u3061\u8fbc\u307f\u30fb\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u8981\u78ba\u8a8dURL\u3092 Slack \u306b\u901a\u77e5\u3057\u307e\u3059\u3002\n *  \uff08\u5019\u88dc\u304c\u30bc\u30ed\u306e\u65e5\u306f\u901a\u77e5\u3057\u307e\u305b\u3093\uff09\n *\n *  \u691c\u77e5\u3059\u308b\u9805\u76ee:\n *   1. \u30af\u30ea\u30c3\u30af\u6570\u306e\u6025\u843d\uff08\u524d\u9031\u540c\u671f\u9593\u6bd4\uff09\n *   2. \u8868\u793a\u56de\u6570\u306e\u6025\u843d\uff08\u524d\u9031\u540c\u671f\u9593\u6bd4\uff09\n *   3. \u5e73\u5747\u63b2\u8f09\u9806\u4f4d\u306e\u60aa\u5316\n *   4. \u30da\u30fc\u30b8\u00d7\u30af\u30a8\u30ea\u5225\u306e\u30ea\u30e9\u30a4\u30c8\u5019\u88dc\uff08\u8868\u793a\u591a\u3044 \/ CTR\u4f4e\u3044 \/ 8\u301c20\u4f4d\uff09\n *   5. \u30da\u30fc\u30b8\u5225\u306e\u6d41\u5165\u843d\u3061\u8fbc\u307f\n *   6. \u9806\u4f4d\u6025\u843d\u30fb\u65b0\u898f\u30af\u30a8\u30ea\u30fb\u6d88\u5931\u30af\u30a8\u30ea\n *   7. \u30e2\u30d0\u30a4\u30eb\u3060\u3051\u9806\u4f4d\u304c\u5f31\u3044\u30da\u30fc\u30b8\n *   8. \u4ee3\u8868URL\u30fb\u843d\u3061\u8fbc\u307fURL\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u72b6\u614b\uff08URL Inspection API\uff09\n *\n *  \u203b Sitemaps API\u306e contents&#91;&#93;.indexed \u306f\u975e\u63a8\u5968\u30670\u306b\u306a\u308a\u3084\u3059\u3044\u305f\u3081\u3001\n *     \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u6570\u306e\u4e00\u62ec\u5224\u5b9a\u306b\u306f\u4f7f\u3044\u307e\u305b\u3093\u3002\n *\n * ------------------------------------------------------------\n *  \u25a0 \u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806\n * ------------------------------------------------------------\n *  1. script.google.com \u3067\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\n *  2. \u3053\u306e\u30b3\u30fc\u30c9\u3092\u4e38\u3054\u3068\u8cbc\u308a\u4ed8\u3051\n *  3. GCP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u300cSearch Console API\u300d\u3092\u6709\u52b9\u5316\u3057\u3001\n *     Apps Script\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8a2d\u5b9a\u3067GCP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u756a\u53f7\u3092\u7d10\u4ed8\u3051\n *     \uff08\u203b\u904e\u53bb\u306b\u3084\u3063\u305f\u624b\u9806\u3068\u540c\u3058\u3002\u30b5\u30fc\u30d3\u30b9\u8ffd\u52a0\u306f\u4e0d\u8981\uff09\n *  4. \u4e0b\u306e SITES \u914d\u5217\u306b\u76e3\u8996\u3057\u305f\u3044\u30b5\u30a4\u30c8\u3092\u767b\u9332\n *  5. \u30b9\u30af\u30ea\u30d7\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3\u306b\u4ee5\u4e0b\u306e2\u3064\u3092\u767b\u9332\uff08\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a &gt; \u30b9\u30af\u30ea\u30d7\u30c8 \u30d7\u30ed\u30d1\u30c6\u30a3\uff09\n *       SLACK_BOT_TOKEN : Slack\u30a2\u30d7\u30ea\u306e Bot User OAuth Token\uff08xoxb- \u3067\u59cb\u307e\u308b\uff09\n *       SLACK_CHANNEL   : \u901a\u77e5\u5148\u30c1\u30e3\u30f3\u30cd\u30eb\uff08\u4f8b: #seo-alert \u307e\u305f\u306f \u30c1\u30e3\u30f3\u30cd\u30ebID C0XXXX\uff09\n *     \u203b Slack\u30a2\u30d7\u30ea\u306b\u306f chat:write \u6a29\u9650\u3092\u4ed8\u4e0e\u3057\u3001\u5bfe\u8c61\u30c1\u30e3\u30f3\u30cd\u30eb\u306bBot\u3092\u62db\u5f85\u3057\u3066\u304a\u304f\u3053\u3068\n *  6. checkNow \u3092\u4e00\u5ea6\u624b\u52d5\u5b9f\u884c\u3057\u3066\u52d5\u4f5c\u78ba\u8a8d\uff06\u6a29\u9650\u627f\u8a8d\n *  7. setupTrigger \u3092\u4e00\u5ea6\u5b9f\u884c \u2192 \u6bce\u9031\u6708\u66dc8\u6642\u306e\u81ea\u52d5\u5b9f\u884c\u304c\u767b\u9332\u3055\u308c\u308b\n *\n *  \u203b \u3053\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u52d5\u304b\u3059Google\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u3001\u5404\u30b5\u30a4\u30c8\u306e\n *    Search Console\u30d7\u30ed\u30d1\u30c6\u30a3\u306b\u300c\u30aa\u30fc\u30ca\u30fc\u300d\u307e\u305f\u306f\u300c\u30d5\u30eb\u30e6\u30fc\u30b6\u30fc\u300d\n *    \u3068\u3057\u3066\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\n * ============================================================\n *\/\n\n\n\/\/ ============================================================\n\/\/  \u8a2d\u5b9a\u30a8\u30ea\u30a2\uff08\u3053\u3053\u3060\u3051\u7de8\u96c6\u3059\u308c\u3070OK\uff09\n\/\/ ============================================================\n\n\/**\n * \u76e3\u8996\u5bfe\u8c61\u30b5\u30a4\u30c8\u306e\u914d\u5217\u3002\u30b5\u30a4\u30c8\u3092\u5897\u3084\u3059\u3068\u304d\u306f\u3053\u3053\u306b\u8ffd\u52a0\u3059\u308b\u3060\u3051\u3002\n *\n *  name       : \u4efb\u610f\u306e\u8868\u793a\u540d\uff08Slack\u901a\u77e5\u306b\u51fa\u308b\uff09\n *  property   : Search Console \u306e\u300c\u30d7\u30ed\u30d1\u30c6\u30a3\u300d\u6587\u5b57\u5217\n *             - \u30c9\u30e1\u30a4\u30f3\u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u5834\u5408:  &#x27;sc-domain:example.com&#x27;\n *             - URL\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u578b\u306e\u5834\u5408:  &#x27;https:\/\/example.com\/&#x27;  \uff08\u672b\u5c3e\u30b9\u30e9\u30c3\u30b7\u30e5\u5fc5\u9808\u30fb\u767b\u9332\u901a\u308a\u306b\uff09\n *  sampleUrls : URL Inspection API\u3067\u6bce\u65e5\u78ba\u8a8d\u3059\u308b\u4ee3\u8868URL\u3002\u672a\u6307\u5b9a\u306a\u3089\u30c8\u30c3\u30d7\u30da\u30fc\u30b8\u3092\u81ea\u52d5\u63a8\u5b9a\u3002\n *\/\nconst SITES = &#91;\n  {\n    name: &#x27;\u30e2\u30c8\u30ad\u30c7\u30b6\u30a4\u30f3&#x27;,\n    property: &#x27;sc-domain:example.co.jp&#x27;,\n    sampleUrls: &#91;&#x27;https:\/\/example.co.jp\/&#x27;&#93;,\n  },\n  {\n    name: &#x27;CG\u30e1\u30bd\u30c3\u30c9&#x27;,\n    property: &#x27;sc-domain:example.com&#x27;,\n    sampleUrls: &#91;&#x27;https:\/\/example.com\/&#x27;&#93;,\n  },\n  \/\/ { name: &#x27;\u30b5\u30a4\u30c83&#x27;, property: &#x27;https:\/\/example.com\/&#x27;, sampleUrls: &#91;&#x27;https:\/\/example.com\/&#x27;&#93; },\n&#93;;\n\n\/**\n * Slack\u306e\u8a8d\u8a3c\u60c5\u5831\u306f\u30b9\u30af\u30ea\u30d7\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3\u304b\u3089\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002\n *   SLACK_BOT_TOKEN : xoxb- \u3067\u59cb\u307e\u308b Bot User OAuth Token\n *   SLACK_CHANNEL   : \u901a\u77e5\u5148\u30c1\u30e3\u30f3\u30cd\u30eb\uff08#\u540d\u524d \u3067\u3082 \u30c1\u30e3\u30f3\u30cd\u30ebID \u3067\u3082\u53ef\uff09\n * \u2191 \u30b3\u30fc\u30c9\u306b\u76f4\u66f8\u304d\u305b\u305a\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u300c\u30b9\u30af\u30ea\u30d7\u30c8 \u30d7\u30ed\u30d1\u30c6\u30a3\u300d\u306b\u767b\u9332\u3059\u308b\u3053\u3068\u3002\n *\/\n\n\/**\n * \u7570\u5e38\u5224\u5b9a\u306e\u3057\u304d\u3044\u5024\u3002\u904b\u7528\u3057\u306a\u304c\u3089\u8abf\u6574\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n *\/\nconst THRESHOLDS = {\n  siteClickDropPct:        30,   \/\/ \u30b5\u30a4\u30c8\u5168\u4f53\u306e\u30af\u30ea\u30c3\u30af\u6570\u304c\u524d\u9031\u6bd4 -30% \u3092\u8d85\u3048\u3066\u6e1b\u3063\u305f\u3089\u901a\u77e5\n  siteImpressionDropPct:   30,   \/\/ \u30b5\u30a4\u30c8\u5168\u4f53\u306e\u8868\u793a\u56de\u6570\u304c\u524d\u9031\u6bd4 -30% \u3092\u8d85\u3048\u3066\u6e1b\u3063\u305f\u3089\u901a\u77e5\n  positionWorsen:          3.0,  \/\/ \u30b5\u30a4\u30c8\u5168\u4f53\u306e\u5e73\u5747\u63b2\u8f09\u9806\u4f4d\u304c\u524d\u9031\u6bd4\u3067 +3.0 \u4ee5\u4e0a\u60aa\u5316\u3057\u305f\u3089\u901a\u77e5\n  minClicksToAlert:        20,   \/\/ \u5143\u306e\u30af\u30ea\u30c3\u30af\u6570\u304c\u3053\u308c\u672a\u6e80\u306e\u30b5\u30a4\u30c8\u306f\u5168\u4f53\u6025\u843d\u5224\u5b9a\u3092\u30b9\u30ad\u30c3\u30d7\n  minImpressionsToAlert:   200,  \/\/ \u5143\u306e\u8868\u793a\u56de\u6570\u304c\u3053\u308c\u672a\u6e80\u306e\u30b5\u30a4\u30c8\u306f\u5168\u4f53\u6025\u843d\u5224\u5b9a\u3092\u30b9\u30ad\u30c3\u30d7\n\n  minRewriteImpressions:   300,  \/\/ \u30ea\u30e9\u30a4\u30c8\u5019\u88dc\u306b\u51fa\u3059\u6700\u4f4e\u8868\u793a\u56de\u6570\n  minNearWinImpressions:   500,  \/\/ 4\u301c20\u4f4d\u306e\u4f38\u3073\u3057\u308d\u5019\u88dc\u306b\u51fa\u3059\u6700\u4f4e\u8868\u793a\u56de\u6570\n  minPagePrevClicks:       10,   \/\/ \u843d\u3061\u8fbc\u307f\u5224\u5b9a\u306b\u4f7f\u3046\u524d\u9031\u30af\u30ea\u30c3\u30af\u6570\n  minPagePrevImpressions:  300,  \/\/ \u843d\u3061\u8fbc\u307f\u5224\u5b9a\u306b\u4f7f\u3046\u524d\u9031\u8868\u793a\u56de\u6570\n  pageDropPct:             40,   \/\/ \u30da\u30fc\u30b8\u5358\u4f4d\u3067\u30af\u30ea\u30c3\u30af\/\u8868\u793a\u304c -40% \u4ee5\u4e0a\u306a\u3089\u843d\u3061\u8fbc\u307f\u5019\u88dc\n  disappearedDropPct:      90,   \/\/ \u8868\u793a\u304c -90% \u4ee5\u4e0a\u306a\u3089\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u691c\u67fb\u5bfe\u8c61\u306b\u512a\u5148\u8ffd\u52a0\n  minQueryImpressions:     80,   \/\/ \u30af\u30a8\u30ea\u5358\u4f4d\u306e\u5206\u6790\u5bfe\u8c61\u306b\u3059\u308b\u6700\u4f4e\u8868\u793a\u56de\u6570\n  rankDropPositions:       5.0,  \/\/ \u30af\u30a8\u30ea\u9806\u4f4d\u304c\u3053\u308c\u4ee5\u4e0a\u60aa\u5316\u3057\u305f\u3089\u901a\u77e5\u5019\u88dc\n  mobilePositionGap:       5.0,  \/\/ \u30e2\u30d0\u30a4\u30eb\u9806\u4f4d\u304cPC\u3088\u308a\u3053\u308c\u4ee5\u4e0a\u60aa\u3051\u308c\u3070\u901a\u77e5\u5019\u88dc\n};\n\nconst ANALYSIS_OPTIONS = {\n  searchType: &#x27;web&#x27;,\n  countryFilter: &#x27;jpn&#x27;,            \/\/ \u65e5\u672c\u306b\u7d5e\u308b\u3002\u5168\u4e16\u754c\u3092\u898b\u308b\u306a\u3089\u7a7a\u6587\u5b57\u306b\u3059\u308b\u3002\n  analyticsPageSize: 25000,        \/\/ Search Analytics API\u306e1\u56de\u3042\u305f\u308a\u6700\u5927\u884c\u6570\n  pageMaxRows: 50000,              \/\/ \u30da\u30fc\u30b8\u5225\u30c7\u30fc\u30bf\u53d6\u5f97\u4e0a\u9650\n  queryMaxRows: 50000,             \/\/ \u30da\u30fc\u30b8\u00d7\u30af\u30a8\u30ea\u53d6\u5f97\u4e0a\u9650\n  deviceMaxRows: 25000,            \/\/ \u30da\u30fc\u30b8\u00d7\u30c7\u30d0\u30a4\u30b9\u53d6\u5f97\u4e0a\u9650\n  rewriteLimit: 5,                 \/\/ Slack\u306b\u51fa\u3059\u30ea\u30e9\u30a4\u30c8\u5019\u88dc\u6570\n  declineLimit: 5,                 \/\/ Slack\u306b\u51fa\u3059\u843d\u3061\u8fbc\u307f\u30da\u30fc\u30b8\u6570\n  rankDropLimit: 5,                \/\/ Slack\u306b\u51fa\u3059\u9806\u4f4d\u6025\u843d\u30af\u30a8\u30ea\u6570\n  queryDiffLimit: 5,               \/\/ Slack\u306b\u51fa\u3059\u65b0\u898f\/\u6d88\u5931\u30af\u30a8\u30ea\u6570\n  deviceGapLimit: 5,               \/\/ Slack\u306b\u51fa\u3059\u30c7\u30d0\u30a4\u30b9\u5dee\u5206\u30da\u30fc\u30b8\u6570\n  indexAlertLimit: 5,              \/\/ Slack\u306b\u51fa\u3059\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u8981\u78ba\u8a8dURL\u6570\n  maxUrlInspectionsPerSite: 8,     \/\/ URL Inspection API\u306e1\u30b5\u30a4\u30c8\u3042\u305f\u308a\u691c\u67fb\u6570\n  inspectIndexTargets: true,\n  checkSitemaps: false,            \/\/ \u30b5\u30a4\u30c8\u30de\u30c3\u30d7\u30a8\u30e9\u30fc\u76e3\u8996\u304c\u5fc5\u8981\u306a\u3089true\n};\n\n\n\/\/ ============================================================\n\/\/  \u30e1\u30a4\u30f3\u51e6\u7406\n\/\/ ============================================================\n\n\/**\n * \u5168\u30b5\u30a4\u30c8\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u3001\u7570\u5e38\u304c\u3042\u308c\u3070Slack\u901a\u77e5\u3059\u308b\u3002\n * \u30c8\u30ea\u30ac\u30fc\u304b\u3089\u6bce\u9031\u547c\u3070\u308c\u308b\u306e\u306f\u3053\u306e\u95a2\u6570\u3002\n *\/\nfunction checkNow() {\n  const allAlerts = &#91;&#93;;   \/\/ { siteName, issues&#91;&#93; } \u306e\u914d\u5217\n  const errors = &#91;&#93;;      \/\/ \u53d6\u5f97\u81ea\u4f53\u306b\u5931\u6557\u3057\u305f\u30b5\u30a4\u30c8\u306e\u30e1\u30e2\n  const noCandidates = &#91;&#93;; \/\/ \u30c1\u30a7\u30c3\u30af\u6e08\u307f\u3060\u304c\u901a\u77e5\u5019\u88dc\u304c\u306a\u304b\u3063\u305f\u30b5\u30a4\u30c8\n\n  SITES.forEach(function (site) {\n    try {\n      const issues = inspectSite_(site);\n      if (issues.length &gt; 0) {\n        allAlerts.push({ siteName: site.name, issues: issues });\n      } else {\n        noCandidates.push(site.name);\n      }\n    } catch (e) {\n      errors.push(site.name + &#x27;: &#x27; + e.message);\n      Logger.log(&#x27;\u3010\u30a8\u30e9\u30fc\u3011&#x27; + site.name + &#x27; \/ &#x27; + e.message);\n    }\n  });\n\n  if (allAlerts.length === 0 &amp;&amp; errors.length === 0) {\n    Logger.log(&#x27;\u5206\u6790\u5019\u88dc\u306a\u3057\u3002\u901a\u77e5\u306f\u9001\u4fe1\u3057\u307e\u305b\u3093\u3002\u30c1\u30a7\u30c3\u30af\u5bfe\u8c61: &#x27; + SITES.length\n      + &#x27; \/ \u5019\u88dc\u306a\u3057: &#x27; + noCandidates.join(&#x27;, &#x27;));\n    return;\n  }\n\n  postSlack_(buildSlackMessage_(allAlerts, errors));\n  Logger.log(&#x27;Slack\u306b\u901a\u77e5\u3057\u307e\u3057\u305f\u3002\u30c1\u30a7\u30c3\u30af\u5bfe\u8c61: &#x27; + SITES.length\n    + &#x27; \/ \u901a\u77e5\u5bfe\u8c61: &#x27; + allAlerts.length\n    + &#x27; \/ \u5019\u88dc\u306a\u3057: &#x27; + (noCandidates.length &gt; 0 ? noCandidates.join(&#x27;, &#x27;) : &#x27;\u306a\u3057&#x27;)\n    + &#x27; \/ \u53d6\u5f97\u5931\u6557: &#x27; + errors.length);\n}\n\n\n\/**\n * 1\u30b5\u30a4\u30c8\u3092\u691c\u67fb\u3057\u3001\u898b\u3064\u304b\u3063\u305f\u7570\u5e38\u306e\u914d\u5217\u3092\u8fd4\u3059\u3002\n * \u7570\u5e38\u304c\u306a\u3051\u308c\u3070\u7a7a\u914d\u5217\u3002\n *\/\nfunction inspectSite_(site) {\n  const issues = &#91;&#93;;\n\n  \/\/ --- 1) \u30b5\u30a4\u30c8\u5168\u4f53\u306e\u524d\u9031\u6bd4\u30c1\u30a7\u30c3\u30af ---\n  const periods = getComparePeriods_();\n  const current  = fetchPerformanceTotals_(site.property, periods.thisStart, periods.thisEnd);\n  const previous = fetchPerformanceTotals_(site.property, periods.prevStart, periods.prevEnd);\n\n  \/\/ \u30af\u30ea\u30c3\u30af\u6570\u306e\u6025\u843d\n  if (previous.clicks &gt;= THRESHOLDS.minClicksToAlert) {\n    const drop = pctChange_(previous.clicks, current.clicks);\n    if (drop &lt;= -THRESHOLDS.siteClickDropPct) {\n      issues.push(&#x27;? \u30b5\u30a4\u30c8\u5168\u4f53\u306e\u30af\u30ea\u30c3\u30af\u6570\u304c\u6025\u843d: &#x27;\n        + previous.clicks + &#x27; \u2192 &#x27; + current.clicks\n        + &#x27; \uff08&#x27; + drop + &#x27;%\uff09&#x27;);\n    }\n  }\n\n  \/\/ \u8868\u793a\u56de\u6570\u306e\u6025\u843d\n  if (previous.impressions &gt;= THRESHOLDS.minImpressionsToAlert) {\n    const drop = pctChange_(previous.impressions, current.impressions);\n    if (drop &lt;= -THRESHOLDS.siteImpressionDropPct) {\n      issues.push(&#x27;? \u30b5\u30a4\u30c8\u5168\u4f53\u306e\u8868\u793a\u56de\u6570\u304c\u6025\u843d: &#x27;\n        + previous.impressions + &#x27; \u2192 &#x27; + current.impressions\n        + &#x27; \uff08&#x27; + drop + &#x27;%\uff09&#x27;);\n    }\n  }\n\n  \/\/ \u5e73\u5747\u63b2\u8f09\u9806\u4f4d\u306e\u60aa\u5316\uff08\u6570\u5024\u304c\u5927\u304d\u3044\uff1d\u9806\u4f4d\u304c\u4e0b\uff1d\u60aa\u5316\uff09\n  if (current.position &gt; 0 &amp;&amp; previous.position &gt; 0) {\n    const worsen = current.position - previous.position;\n    if (worsen &gt;= THRESHOLDS.positionWorsen) {\n      issues.push(&#x27;? \u5e73\u5747\u63b2\u8f09\u9806\u4f4d\u304c\u60aa\u5316: &#x27;\n        + previous.position.toFixed(1) + &#x27;\u4f4d \u2192 &#x27; + current.position.toFixed(1) + &#x27;\u4f4d&#x27;\n        + &#x27; \uff08&#x27; + (worsen &gt; 0 ? &#x27;+&#x27; : &#x27;&#x27;) + worsen.toFixed(1) + &#x27;\uff09&#x27;);\n    }\n  }\n\n  \/\/ --- 2) \u30da\u30fc\u30b8\u5225\u306eGSC\u30c7\u30fc\u30bf\u304b\u3089\u30ea\u30e9\u30a4\u30c8\u5019\u88dc\u3068\u843d\u3061\u8fbc\u307f\u3092\u5206\u6790 ---\n  const currentPages = fetchPagePerformance_(site.property, periods.thisStart, periods.thisEnd);\n  const previousPages = fetchPagePerformance_(site.property, periods.prevStart, periods.prevEnd);\n  const currentPageQueries = fetchPageQueryPerformance_(site.property, periods.thisStart, periods.thisEnd);\n  const previousPageQueries = fetchPageQueryPerformance_(site.property, periods.prevStart, periods.prevEnd);\n  const topQueryByPage = mergeTopQueryMaps_(\n    getTopQueryByPage_(currentPageQueries),\n    getTopQueryByPage_(previousPageQueries)\n  );\n  const pageAnalysis = analyzePages_(currentPages, previousPages, topQueryByPage);\n  const queryAnalysis = analyzeQueries_(currentPageQueries, previousPageQueries);\n  const currentPageDevices = fetchPageDevicePerformance_(site.property, periods.thisStart, periods.thisEnd);\n  const deviceGaps = analyzeDeviceGaps_(currentPageDevices);\n\n  if (queryAnalysis.rewriteCandidates.length &gt; 0) {\n    issues.push(formatRewriteCandidates_(queryAnalysis.rewriteCandidates));\n  }\n  if (pageAnalysis.decliningPages.length &gt; 0) {\n    issues.push(formatDecliningPages_(pageAnalysis.decliningPages));\n  }\n  if (queryAnalysis.rankDrops.length &gt; 0) {\n    issues.push(formatRankDrops_(queryAnalysis.rankDrops));\n  }\n  if (queryAnalysis.newQueries.length &gt; 0 || queryAnalysis.lostQueries.length &gt; 0) {\n    issues.push(formatQueryDiffs_(queryAnalysis.newQueries, queryAnalysis.lostQueries));\n  }\n  if (deviceGaps.length &gt; 0) {\n    issues.push(formatDeviceGaps_(deviceGaps));\n  }\n\n  \/\/ --- 3) \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u72b6\u614b\u304c\u304a\u304b\u3057\u305d\u3046\u306aURL\u3092\u30b5\u30f3\u30d7\u30eb\u691c\u67fb ---\n  let inspectionTargets = &#91;&#93;;\n  let indexIssues = &#91;&#93;;\n  if (ANALYSIS_OPTIONS.inspectIndexTargets) {\n    inspectionTargets = buildInspectionTargets_(site, currentPages, previousPages, pageAnalysis, queryAnalysis);\n    indexIssues = inspectIndexTargets_(site.property, inspectionTargets);\n    if (indexIssues.length &gt; 0) {\n      issues.push(formatIndexIssues_(indexIssues));\n    }\n  }\n\n  \/\/ --- 4) \u5fc5\u8981\u306a\u6642\u3060\u3051\u30b5\u30a4\u30c8\u30de\u30c3\u30d7\u30a8\u30e9\u30fc\u3082\u898b\u308b\uff08\u901a\u5e38\u306f\u30aa\u30d5\uff09 ---\n  if (ANALYSIS_OPTIONS.checkSitemaps) {\n    const sitemapIssues = inspectSitemaps_(site.property);\n    if (sitemapIssues.length &gt; 0) {\n      issues.push(&#x27;?\ufe0f \u30b5\u30a4\u30c8\u30de\u30c3\u30d7\u8981\u78ba\u8a8d\\n      &#x27; + sitemapIssues.join(&#x27;\\n      &#x27;));\n    }\n  }\n\n  logSiteAnalysisSummary_(site, periods, current, previous, {\n    currentPages: currentPages,\n    previousPages: previousPages,\n    currentPageQueries: currentPageQueries,\n    previousPageQueries: previousPageQueries,\n    currentPageDevices: currentPageDevices,\n    pageAnalysis: pageAnalysis,\n    queryAnalysis: queryAnalysis,\n    deviceGaps: deviceGaps,\n    inspectionTargets: inspectionTargets,\n    indexIssues: indexIssues,\n    issueCount: issues.length,\n  });\n\n  return issues;\n}\n\n\n\/\/ ============================================================\n\/\/  Search Console API \u547c\u3073\u51fa\u3057\uff08UrlFetchApp \u3067\u76f4\u63a5\uff09\n\/\/ ============================================================\n\nconst SC_API_BASE = &#x27;https:\/\/www.googleapis.com\/webmasters\/v3&#x27;;\nconst URL_INSPECTION_API = &#x27;https:\/\/searchconsole.googleapis.com\/v1\/urlInspection\/index:inspect&#x27;;\n\n\/**\n * \u6307\u5b9a\u671f\u9593\u306e\u691c\u7d22\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5408\u8a08\uff08\u30af\u30ea\u30c3\u30af\u30fb\u8868\u793a\u30fb\u9806\u4f4d\uff09\u3092\u53d6\u5f97\u3002\n *\/\nfunction fetchPerformanceTotals_(property, startDate, endDate) {\n  const url = SC_API_BASE + &#x27;\/sites\/&#x27;\n    + encodeURIComponent(property) + &#x27;\/searchAnalytics\/query&#x27;;\n\n  const payload = {\n    startDate: startDate,\n    endDate: endDate,\n    dimensions: &#91;&#93;,          \/\/ \u96c6\u8a08\u306a\u3057\uff1d\u5168\u4f53\u5408\u8a08\u304c1\u884c\u3067\u8fd4\u308b\n    dataState: &#x27;final&#x27;,\n    type: ANALYSIS_OPTIONS.searchType,\n    rowLimit: 1,\n  };\n  const countryFilter = buildCountryFilter_();\n  if (countryFilter) {\n    payload.dimensionFilterGroups = &#91;countryFilter&#93;;\n  }\n\n  const res = UrlFetchApp.fetch(url, {\n    method: &#x27;post&#x27;,\n    contentType: &#x27;application\/json&#x27;,\n    headers: { Authorization: &#x27;Bearer &#x27; + ScriptApp.getOAuthToken() },\n    payload: JSON.stringify(payload),\n    muteHttpExceptions: true,\n  });\n\n  const code = res.getResponseCode();\n  if (code !== 200) {\n    throw new Error(&#x27;\u691c\u7d22\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u53d6\u5f97\u5931\u6557 (HTTP &#x27; + code + &#x27;): &#x27;\n      + extractApiErrorMessage_(res));\n  }\n\n  const rows = (JSON.parse(res.getContentText()).rows) || &#91;&#93;;\n  if (rows.length === 0) {\n    return { clicks: 0, impressions: 0, ctr: 0, position: 0 };\n  }\n  const r = rows&#91;0&#93;;\n  return {\n    clicks:      r.clicks      || 0,\n    impressions: r.impressions || 0,\n    ctr:         r.ctr         || 0,\n    position:    r.position    || 0,\n  };\n}\n\n\/**\n * \u30da\u30fc\u30b8\u5225\u306e\u691c\u7d22\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u53d6\u5f97\u3059\u308b\u3002\n *\/\nfunction fetchPagePerformance_(property, startDate, endDate) {\n  return fetchSearchAnalyticsRows_(\n    property,\n    startDate,\n    endDate,\n    &#91;&#x27;page&#x27;&#93;,\n    ANALYSIS_OPTIONS.pageMaxRows\n  ).map(function (row) {\n    return toPageMetric_(row.keys&#91;0&#93;, row);\n  }).filter(function (row) {\n    return row.page;\n  });\n}\n\n\/**\n * \u30da\u30fc\u30b8\u00d7\u30af\u30a8\u30ea\u306e\u691c\u7d22\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u53d6\u5f97\u3059\u308b\u3002\n *\/\nfunction fetchPageQueryPerformance_(property, startDate, endDate) {\n  return fetchSearchAnalyticsRows_(\n    property,\n    startDate,\n    endDate,\n    &#91;&#x27;page&#x27;, &#x27;query&#x27;&#93;,\n    ANALYSIS_OPTIONS.queryMaxRows\n  ).map(function (row) {\n    return toPageQueryMetric_(row.keys&#91;0&#93;, row.keys&#91;1&#93;, row);\n  }).filter(function (row) {\n    return row.page &amp;&amp; row.query;\n  });\n}\n\n\/**\n * \u30da\u30fc\u30b8\u00d7\u30c7\u30d0\u30a4\u30b9\u306e\u691c\u7d22\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u53d6\u5f97\u3059\u308b\u3002\n *\/\nfunction fetchPageDevicePerformance_(property, startDate, endDate) {\n  return fetchSearchAnalyticsRows_(\n    property,\n    startDate,\n    endDate,\n    &#91;&#x27;page&#x27;, &#x27;device&#x27;&#93;,\n    ANALYSIS_OPTIONS.deviceMaxRows\n  ).map(function (row) {\n    return {\n      page: row.keys&#91;0&#93; || &#x27;&#x27;,\n      device: row.keys&#91;1&#93; || &#x27;&#x27;,\n      clicks: row.clicks,\n      impressions: row.impressions,\n      ctr: row.ctr,\n      position: row.position,\n    };\n  }).filter(function (row) {\n    return row.page &amp;&amp; row.device;\n  });\n}\n\n\/**\n * \u30da\u30fc\u30b8\u3054\u3068\u306e\u4ee3\u8868\u30af\u30a8\u30ea\u3092\u62bd\u51fa\u3059\u308b\u3002\n *\/\nfunction getTopQueryByPage_(rows) {\n  const byPage = {};\n  rows.forEach(function (row) {\n    const positionBoost = Math.max(1, 25 - Math.min(Number(row.position || 25), 25));\n    const score = Number(row.impressions || 0) * positionBoost;\n    if (!byPage&#91;row.page&#93; || score &gt; byPage&#91;row.page&#93;.score) {\n      byPage&#91;row.page&#93; = {\n        query: row.query,\n        clicks: row.clicks,\n        impressions: row.impressions,\n        ctr: row.ctr,\n        position: row.position,\n        score: score,\n      };\n    }\n  });\n\n  return byPage;\n}\n\nfunction mergeTopQueryMaps_(primary, fallback) {\n  const merged = {};\n  Object.keys(fallback || {}).forEach(function (page) {\n    merged&#91;page&#93; = fallback&#91;page&#93;;\n  });\n  Object.keys(primary || {}).forEach(function (page) {\n    merged&#91;page&#93; = primary&#91;page&#93;;\n  });\n  return merged;\n}\n\n\/**\n * Search Analytics API\u306e\u6c4e\u7528\u547c\u3073\u51fa\u3057\u3002\n *\/\nfunction fetchSearchAnalyticsRows_(property, startDate, endDate, dimensions, rowLimit) {\n  const url = SC_API_BASE + &#x27;\/sites\/&#x27;\n    + encodeURIComponent(property) + &#x27;\/searchAnalytics\/query&#x27;;\n  const rows = &#91;&#93;;\n  const maxRows = rowLimit || ANALYSIS_OPTIONS.analyticsPageSize;\n  const pageSize = Math.min(ANALYSIS_OPTIONS.analyticsPageSize, maxRows);\n\n  for (let startRow = 0; startRow &lt; maxRows; startRow += pageSize) {\n    const payload = {\n      startDate: startDate,\n      endDate: endDate,\n      dimensions: dimensions,\n      dataState: &#x27;final&#x27;,\n      type: ANALYSIS_OPTIONS.searchType,\n      rowLimit: pageSize,\n      startRow: startRow,\n    };\n    const countryFilter = buildCountryFilter_();\n    if (countryFilter) {\n      payload.dimensionFilterGroups = &#91;countryFilter&#93;;\n    }\n\n    const res = UrlFetchApp.fetch(url, {\n      method: &#x27;post&#x27;,\n      contentType: &#x27;application\/json&#x27;,\n      headers: { Authorization: &#x27;Bearer &#x27; + ScriptApp.getOAuthToken() },\n      payload: JSON.stringify(payload),\n      muteHttpExceptions: true,\n    });\n\n    const code = res.getResponseCode();\n    if (code !== 200) {\n      throw new Error(&#x27;Search Analytics\u53d6\u5f97\u5931\u6557 (HTTP &#x27; + code + &#x27;): &#x27;\n        + extractApiErrorMessage_(res));\n    }\n\n    const pageRows = (JSON.parse(res.getContentText()).rows || &#91;&#93;).map(function (r) {\n      return {\n        keys: r.keys || &#91;&#93;,\n        clicks: Number(r.clicks || 0),\n        impressions: Number(r.impressions || 0),\n        ctr: Number(r.ctr || 0),\n        position: Number(r.position || 0),\n      };\n    });\n\n    rows.push.apply(rows, pageRows);\n    if (pageRows.length &lt; pageSize) break;\n  }\n\n  return rows;\n}\n\nfunction buildCountryFilter_() {\n  if (!ANALYSIS_OPTIONS.countryFilter) return null;\n  return {\n    filters: &#91;{\n      dimension: &#x27;country&#x27;,\n      operator: &#x27;equals&#x27;,\n      expression: ANALYSIS_OPTIONS.countryFilter,\n    }&#93;,\n  };\n}\n\n\/**\n * \u30b5\u30a4\u30c8\u306b\u767b\u9332\u3055\u308c\u305f\u30b5\u30a4\u30c8\u30de\u30c3\u30d7\u4e00\u89a7\u3092\u53d6\u5f97\u3002\n * \u5404\u8981\u7d20: { path, submitted, errors, warnings }\n *\/\nfunction fetchSitemaps_(property) {\n  const url = SC_API_BASE + &#x27;\/sites\/&#x27;\n    + encodeURIComponent(property) + &#x27;\/sitemaps&#x27;;\n\n  const res = UrlFetchApp.fetch(url, {\n    method: &#x27;get&#x27;,\n    headers: { Authorization: &#x27;Bearer &#x27; + ScriptApp.getOAuthToken() },\n    muteHttpExceptions: true,\n  });\n\n  const code = res.getResponseCode();\n  if (code !== 200) {\n    throw new Error(&#x27;\u30b5\u30a4\u30c8\u30de\u30c3\u30d7\u53d6\u5f97\u5931\u6557 (HTTP &#x27; + code + &#x27;): &#x27;\n      + extractApiErrorMessage_(res));\n  }\n\n  const sitemaps = (JSON.parse(res.getContentText()).sitemap) || &#91;&#93;;\n  return sitemaps.map(function (sm) {\n    let submitted = 0;\n    (sm.contents || &#91;&#93;).forEach(function (c) {\n      submitted += Number(c.submitted || 0);\n    });\n    return {\n      path:      sm.path,\n      submitted: submitted,\n      errors:    Number(sm.errors   || 0),\n      warnings:  Number(sm.warnings || 0),\n    };\n  });\n}\n\n\/**\n * URL Inspection API\u3067\u4ee3\u8868URL\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u72b6\u614b\u3092\u78ba\u8a8d\u3059\u308b\u3002\n *\/\nfunction fetchUrlInspection_(property, inspectionUrl) {\n  const res = UrlFetchApp.fetch(URL_INSPECTION_API, {\n    method: &#x27;post&#x27;,\n    contentType: &#x27;application\/json&#x27;,\n    headers: { Authorization: &#x27;Bearer &#x27; + ScriptApp.getOAuthToken() },\n    payload: JSON.stringify({\n      inspectionUrl: inspectionUrl,\n      siteUrl: property,\n      languageCode: &#x27;ja-JP&#x27;,\n    }),\n    muteHttpExceptions: true,\n  });\n\n  const code = res.getResponseCode();\n  if (code !== 200) {\n    throw new Error(&#x27;URL Inspection\u53d6\u5f97\u5931\u6557 (HTTP &#x27; + code + &#x27;): &#x27;\n      + extractApiErrorMessage_(res));\n  }\n\n  const body = JSON.parse(res.getContentText() || &#x27;{}&#x27;);\n  const indexStatus = (((body.inspectionResult || {}).indexStatusResult) || {});\n  return {\n    url: inspectionUrl,\n    verdict: indexStatus.verdict || &#x27;&#x27;,\n    coverageState: indexStatus.coverageState || &#x27;&#x27;,\n    robotsTxtState: indexStatus.robotsTxtState || &#x27;&#x27;,\n    indexingState: indexStatus.indexingState || &#x27;&#x27;,\n    pageFetchState: indexStatus.pageFetchState || &#x27;&#x27;,\n    lastCrawlTime: indexStatus.lastCrawlTime || &#x27;&#x27;,\n    googleCanonical: indexStatus.googleCanonical || &#x27;&#x27;,\n    userCanonical: indexStatus.userCanonical || &#x27;&#x27;,\n  };\n}\n\nfunction inspectSitemaps_(property) {\n  const issues = &#91;&#93;;\n  fetchSitemaps_(property).forEach(function (sm) {\n    if (Number(sm.errors) &gt; 0) {\n      issues.push(&#x27;\u30a8\u30e9\u30fc: &#x27; + sm.path + &#x27;\uff08&#x27; + sm.errors + &#x27;\u4ef6\uff09&#x27;);\n    }\n    if (Number(sm.warnings) &gt; 0) {\n      issues.push(&#x27;\u8b66\u544a: &#x27; + sm.path + &#x27;\uff08&#x27; + sm.warnings + &#x27;\u4ef6\uff09&#x27;);\n    }\n  });\n  return issues;\n}\n\n\n\/\/ ============================================================\n\/\/  \u671f\u9593\u30fb\u8a08\u7b97\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\n\/\/ ============================================================\n\n\/**\n * \u6bd4\u8f03\u3059\u308b2\u3064\u306e\u671f\u9593\u3092\u8fd4\u3059\u3002\n * GSC\u306e\u30c7\u30fc\u30bf\u306f\u6570\u65e5\u9045\u308c\u308b\u305f\u3081\u30013\u65e5\u524d\u3092\u57fa\u6e96\u306b\u76f4\u8fd17\u65e5\u3068\n * \u305d\u306e\u524d\u306e7\u65e5\u3092\u6bd4\u8f03\u3059\u308b\u3002\n *\/\nfunction getComparePeriods_() {\n  const tz = Session.getScriptTimeZone();\n  const fmt = function (d) { return Utilities.formatDate(d, tz, &#x27;yyyy-MM-dd&#x27;); };\n  const dayMs = 24 * 60 * 60 * 1000;\n\n  const base = new Date();\n  base.setTime(base.getTime() - 3 * dayMs);  \/\/ 3\u65e5\u524d\u3092\u672b\u5c3e\u306b\n\n  const thisEnd   = new Date(base.getTime());\n  const thisStart = new Date(base.getTime() - 6 * dayMs);\n  const prevEnd   = new Date(base.getTime() - 7 * dayMs);\n  const prevStart = new Date(base.getTime() - 13 * dayMs);\n\n  return {\n    thisStart: fmt(thisStart), thisEnd: fmt(thisEnd),\n    prevStart: fmt(prevStart), prevEnd: fmt(prevEnd),\n  };\n}\n\n\/** \u5909\u5316\u7387\uff08%\uff09\u3002oldVal\u2192newVal\u3002\u30de\u30a4\u30ca\u30b9\u304c\u6e1b\u5c11\u3002 *\/\nfunction pctChange_(oldVal, newVal) {\n  if (oldVal === 0) return 0;\n  return Math.round(((newVal - oldVal) \/ oldVal) * 100);\n}\n\nfunction toPageMetric_(page, row) {\n  return {\n    page: page || &#x27;&#x27;,\n    clicks: Number(row.clicks || 0),\n    impressions: Number(row.impressions || 0),\n    ctr: Number(row.ctr || 0),\n    position: Number(row.position || 0),\n  };\n}\n\nfunction toPageQueryMetric_(page, query, row) {\n  return {\n    page: page || &#x27;&#x27;,\n    query: query || &#x27;&#x27;,\n    key: makePageQueryKey_(page, query),\n    clicks: Number(row.clicks || 0),\n    impressions: Number(row.impressions || 0),\n    ctr: Number(row.ctr || 0),\n    position: Number(row.position || 0),\n  };\n}\n\nfunction emptyPageMetric_(page) {\n  return { page: page || &#x27;&#x27;, clicks: 0, impressions: 0, ctr: 0, position: 0 };\n}\n\nfunction emptyPageQueryMetric_(page, query) {\n  return {\n    page: page || &#x27;&#x27;,\n    query: query || &#x27;&#x27;,\n    key: makePageQueryKey_(page, query),\n    clicks: 0,\n    impressions: 0,\n    ctr: 0,\n    position: 0,\n  };\n}\n\nfunction mapByPage_(rows) {\n  const map = {};\n  rows.forEach(function (row) {\n    if (row.page) map&#91;row.page&#93; = row;\n  });\n  return map;\n}\n\nfunction mapByPageQuery_(rows) {\n  const map = {};\n  rows.forEach(function (row) {\n    if (row.key) map&#91;row.key&#93; = row;\n  });\n  return map;\n}\n\nfunction makePageQueryKey_(page, query) {\n  return String(page || &#x27;&#x27;) + &#x27;\\n&#x27; + String(query || &#x27;&#x27;);\n}\n\n\/**\n * \u30da\u30fc\u30b8\u5358\u4f4d\u306e\u30ea\u30e9\u30a4\u30c8\u5019\u88dc\u3068\u843d\u3061\u8fbc\u307f\u30da\u30fc\u30b8\u3092\u62bd\u51fa\u3059\u308b\u3002\n *\/\nfunction analyzePages_(currentPages, previousPages, topQueryByPage) {\n  const previousByPage = mapByPage_(previousPages);\n  const currentByPage = mapByPage_(currentPages);\n  const declineByPage = {};\n\n  currentPages.forEach(function (cur) {\n    const prev = previousByPage&#91;cur.page&#93; || emptyPageMetric_(cur.page);\n    addDeclineCandidate_(declineByPage, cur, prev, topQueryByPage&#91;cur.page&#93; || null);\n  });\n\n  previousPages.forEach(function (prev) {\n    const cur = currentByPage&#91;prev.page&#93; || emptyPageMetric_(prev.page);\n    addDeclineCandidate_(declineByPage, cur, prev, topQueryByPage&#91;prev.page&#93; || null);\n  });\n\n  const decliningPages = Object.keys(declineByPage).map(function (page) {\n    return declineByPage&#91;page&#93;;\n  }).sort(function (a, b) {\n    return b.score - a.score;\n  }).slice(0, ANALYSIS_OPTIONS.declineLimit);\n\n  return {\n    decliningPages: decliningPages,\n  };\n}\n\nfunction analyzeQueries_(currentRows, previousRows) {\n  const previousByKey = mapByPageQuery_(previousRows);\n  const currentByKey = mapByPageQuery_(currentRows);\n  const rewriteCandidates = &#91;&#93;;\n  const rankDrops = &#91;&#93;;\n  const newQueries = &#91;&#93;;\n  const lostQueries = &#91;&#93;;\n\n  currentRows.forEach(function (cur) {\n    const prev = previousByKey&#91;cur.key&#93; || emptyPageQueryMetric_(cur.page, cur.query);\n    const ctrPct = cur.ctr * 100;\n    const expectedCtr = getExpectedCtrPct_(cur.position);\n    const reasons = &#91;&#93;;\n    let score = 0;\n\n    if (\n      cur.impressions &gt;= THRESHOLDS.minRewriteImpressions &amp;&amp;\n      cur.position &gt; 0 &amp;&amp;\n      cur.position &lt;= 10 &amp;&amp;\n      ctrPct &lt; expectedCtr\n    ) {\n      const lostClicks = Math.max(0, Math.round(cur.impressions * ((expectedCtr - ctrPct) \/ 100)));\n      reasons.push(&#x27;CTR\u4f4e\u3081 &#x27; + formatPct_(ctrPct) + &#x27;\uff08\u9806\u4f4d\u76ee\u5b89 &#x27; + formatPct_(expectedCtr) + &#x27; \/ \u63a8\u5b9a\u53d6\u308a\u3053\u307c\u3057 &#x27; + lostClicks + &#x27;\u30af\u30ea\u30c3\u30af\uff09&#x27;);\n      score += lostClicks * 100 + cur.impressions;\n    }\n\n    if (\n      cur.impressions &gt;= THRESHOLDS.minNearWinImpressions &amp;&amp;\n      cur.position &gt;= 8 &amp;&amp;\n      cur.position &lt;= 20\n    ) {\n      reasons.push(&#x27;8\u301c20\u4f4d\u3067\u4f38\u3073\u3057\u308d\u3042\u308a&#x27;);\n      score += Math.round(cur.impressions * Math.max(1, 21 - cur.position));\n    }\n\n    if (reasons.length &gt; 0) {\n      rewriteCandidates.push({\n        page: cur.page,\n        query: cur.query,\n        current: cur,\n        previous: prev,\n        reasons: reasons,\n        score: score,\n      });\n    }\n\n    if (\n      prev.impressions &gt;= THRESHOLDS.minQueryImpressions &amp;&amp;\n      prev.position &gt; 0 &amp;&amp;\n      cur.position &gt; 0 &amp;&amp;\n      (cur.position - prev.position) &gt;= THRESHOLDS.rankDropPositions\n    ) {\n      rankDrops.push({\n        page: cur.page,\n        query: cur.query,\n        current: cur,\n        previous: prev,\n        positionDrop: cur.position - prev.position,\n        score: prev.impressions * (cur.position - prev.position),\n      });\n    }\n\n    if (\n      cur.impressions &gt;= THRESHOLDS.minQueryImpressions &amp;&amp;\n      prev.impressions === 0\n    ) {\n      newQueries.push({\n        page: cur.page,\n        query: cur.query,\n        current: cur,\n        score: cur.impressions,\n      });\n    }\n  });\n\n  previousRows.forEach(function (prev) {\n    const cur = currentByKey&#91;prev.key&#93; || emptyPageQueryMetric_(prev.page, prev.query);\n    if (\n      prev.impressions &gt;= THRESHOLDS.minQueryImpressions &amp;&amp;\n      cur.impressions === 0\n    ) {\n      lostQueries.push({\n        page: prev.page,\n        query: prev.query,\n        previous: prev,\n        score: prev.impressions,\n      });\n    }\n  });\n\n  return {\n    rewriteCandidates: rewriteCandidates.sort(sortByScore_).slice(0, ANALYSIS_OPTIONS.rewriteLimit),\n    rankDrops: rankDrops.sort(sortByScore_).slice(0, ANALYSIS_OPTIONS.rankDropLimit),\n    newQueries: newQueries.sort(sortByScore_).slice(0, ANALYSIS_OPTIONS.queryDiffLimit),\n    lostQueries: lostQueries.sort(sortByScore_).slice(0, ANALYSIS_OPTIONS.queryDiffLimit),\n  };\n}\n\nfunction analyzeDeviceGaps_(rows) {\n  const byPage = {};\n  rows.forEach(function (row) {\n    if (!byPage&#91;row.page&#93;) byPage&#91;row.page&#93; = {};\n    byPage&#91;row.page&#93;&#91;String(row.device).toLowerCase()&#93; = row;\n  });\n\n  return Object.keys(byPage).map(function (page) {\n    const group = byPage&#91;page&#93;;\n    const mobile = group.mobile;\n    const desktop = group.desktop;\n    if (!mobile || !desktop) return null;\n    const gap = mobile.position - desktop.position;\n    if (\n      mobile.impressions &lt; THRESHOLDS.minPagePrevImpressions ||\n      gap &lt; THRESHOLDS.mobilePositionGap\n    ) {\n      return null;\n    }\n    return {\n      page: page,\n      mobile: mobile,\n      desktop: desktop,\n      gap: gap,\n      score: mobile.impressions * gap,\n    };\n  }).filter(function (item) {\n    return item !== null;\n  }).sort(sortByScore_).slice(0, ANALYSIS_OPTIONS.deviceGapLimit);\n}\n\nfunction sortByScore_(a, b) {\n  return b.score - a.score;\n}\n\nfunction addDeclineCandidate_(declineByPage, cur, prev, topQuery) {\n  if (!prev || !prev.page) return;\n  const clickDrop = pctChange_(prev.clicks, cur.clicks);\n  const impressionDrop = pctChange_(prev.impressions, cur.impressions);\n  const enoughClicks = prev.clicks &gt;= THRESHOLDS.minPagePrevClicks;\n  const enoughImpressions = prev.impressions &gt;= THRESHOLDS.minPagePrevImpressions;\n  const isDrop =\n    (enoughClicks &amp;&amp; clickDrop &lt;= -THRESHOLDS.pageDropPct) ||\n    (enoughImpressions &amp;&amp; impressionDrop &lt;= -THRESHOLDS.pageDropPct);\n\n  if (!isDrop) return;\n\n  const lostClicks = Math.max(0, prev.clicks - cur.clicks);\n  const lostImpressions = Math.max(0, prev.impressions - cur.impressions);\n  const score = lostClicks * 30 + lostImpressions;\n  const existing = declineByPage&#91;prev.page&#93;;\n  if (existing &amp;&amp; existing.score &gt;= score) return;\n\n  declineByPage&#91;prev.page&#93; = {\n    page: prev.page,\n    current: cur,\n    previous: prev,\n    topQuery: topQuery,\n    clickDrop: clickDrop,\n    impressionDrop: impressionDrop,\n    score: score,\n    disappeared: enoughImpressions &amp;&amp; impressionDrop &lt;= -THRESHOLDS.disappearedDropPct,\n  };\n}\n\nfunction getExpectedCtrPct_(position) {\n  if (!position || position &lt;= 0) return 0;\n  if (position &lt;= 1.5) return 30.0;\n  if (position &lt;= 2.5) return 20.0;\n  if (position &lt;= 3.5) return 15.0;\n  if (position &lt;= 4.5) return 10.0;\n  if (position &lt;= 5.5) return 8.0;\n  if (position &lt;= 7.5) return 5.0;\n  if (position &lt;= 10.5) return 3.0;\n  if (position &lt;= 20) return 1.0;\n  return 0.5;\n}\n\n\/**\n * \u4ee3\u8868URL\u306e\u8a2d\u5b9a\u304c\u306a\u3051\u308c\u3070\u3001Search Console\u30d7\u30ed\u30d1\u30c6\u30a3\u304b\u3089\u30c8\u30c3\u30d7\u30da\u30fc\u30b8URL\u3092\u63a8\u5b9a\u3059\u308b\u3002\n *\/\nfunction getSampleUrls_(site) {\n  if (site.sampleUrls &amp;&amp; site.sampleUrls.length &gt; 0) {\n    return site.sampleUrls;\n  }\n  if (site.property.indexOf(&#x27;sc-domain:&#x27;) === 0) {\n    return &#91;&#x27;https:\/\/&#x27; + site.property.replace(&#x27;sc-domain:&#x27;, &#x27;&#x27;) + &#x27;\/&#x27;&#93;;\n  }\n  if (\/^https?:\\\/\\\/\/.test(site.property)) {\n    return &#91;site.property&#93;;\n  }\n  return &#91;&#93;;\n}\n\nfunction buildInspectionTargets_(site, currentPages, previousPages, pageAnalysis, queryAnalysis) {\n  const targets = &#91;&#93;;\n\n  getSampleUrls_(site).forEach(function (url) {\n    targets.push(url);\n  });\n\n  pageAnalysis.decliningPages.forEach(function (item) {\n    if (item.disappeared || item.current.impressions === 0) {\n      targets.push(item.page);\n    }\n  });\n\n  queryAnalysis.rewriteCandidates.slice(0, 2).forEach(function (item) {\n    targets.push(item.page);\n  });\n\n  currentPages.slice().sort(function (a, b) {\n    return b.impressions - a.impressions;\n  }).slice(0, 2).forEach(function (item) {\n    targets.push(item.page);\n  });\n\n  return uniqueUrls_(targets).slice(0, ANALYSIS_OPTIONS.maxUrlInspectionsPerSite);\n}\n\nfunction inspectIndexTargets_(property, urls) {\n  const issues = &#91;&#93;;\n  urls.forEach(function (url) {\n    if (issues.length &gt;= ANALYSIS_OPTIONS.indexAlertLimit) return;\n    try {\n      const result = fetchUrlInspection_(property, url);\n      const reasons = getIndexIssueReasons_(result);\n      if (reasons.length &gt; 0) {\n        issues.push({\n          url: url,\n          reasons: reasons,\n          result: result,\n        });\n      }\n    } catch (e) {\n      issues.push({\n        url: url,\n        reasons: &#91;&#x27;\u691c\u67fb\u5931\u6557: &#x27; + e.message&#93;,\n        result: null,\n      });\n    }\n  });\n  return issues;\n}\n\nfunction getIndexIssueReasons_(result) {\n  const reasons = &#91;&#93;;\n\n  if (!result.verdict) {\n    reasons.push(&#x27;\u5224\u5b9a\u4e0d\u660e&#x27;);\n  } else if (result.verdict !== &#x27;PASS&#x27;) {\n    reasons.push(&#x27;\u5224\u5b9a: &#x27; + result.verdict);\n  }\n\n  if (result.coverageState) {\n    const state = result.coverageState;\n    if (\n      \/not indexed|excluded|blocked|error|alternate|duplicate|noindex|\u691c\u51fa|\u672a\u767b\u9332|\u9664\u5916|\u30d6\u30ed\u30c3\u30af\/i.test(state)\n    ) {\n      reasons.push(state);\n    }\n  }\n\n  if (result.robotsTxtState &amp;&amp; result.robotsTxtState !== &#x27;ALLOWED&#x27;) {\n    reasons.push(&#x27;robots.txt: &#x27; + result.robotsTxtState);\n  }\n  if (result.indexingState &amp;&amp; result.indexingState !== &#x27;INDEXING_ALLOWED&#x27;) {\n    reasons.push(&#x27;indexing: &#x27; + result.indexingState);\n  }\n  if (\n    result.pageFetchState &amp;&amp;\n    result.pageFetchState !== &#x27;SUCCESSFUL&#x27; &amp;&amp;\n    result.pageFetchState !== &#x27;PAGE_FETCH_STATE_UNSPECIFIED&#x27;\n  ) {\n    reasons.push(&#x27;\u53d6\u5f97: &#x27; + result.pageFetchState);\n  }\n\n  if (\n    result.googleCanonical &amp;&amp;\n    result.userCanonical &amp;&amp;\n    normalizeUrlForCompare_(result.googleCanonical) !== normalizeUrlForCompare_(result.userCanonical)\n  ) {\n    reasons.push(&#x27;Google\u6b63\u898fURL\u304c\u5225: &#x27; + result.googleCanonical);\n  }\n\n  return uniqueStrings_(reasons);\n}\n\nfunction uniqueUrls_(urls) {\n  const seen = {};\n  const out = &#91;&#93;;\n  urls.forEach(function (url) {\n    if (!url || !\/^https?:\\\/\\\/\/.test(url)) return;\n    const key = normalizeUrlForCompare_(url);\n    if (seen&#91;key&#93;) return;\n    seen&#91;key&#93; = true;\n    out.push(url);\n  });\n  return out;\n}\n\nfunction uniqueStrings_(values) {\n  const seen = {};\n  const out = &#91;&#93;;\n  values.forEach(function (value) {\n    if (!value || seen&#91;value&#93;) return;\n    seen&#91;value&#93; = true;\n    out.push(value);\n  });\n  return out;\n}\n\nfunction normalizeUrlForCompare_(url) {\n  return String(url || &#x27;&#x27;).trim().replace(\/#.*$\/, &#x27;&#x27;)\n    .replace(\/^(https?):\\\/\\\/(&#91;^\/?#&#93;+)\/i, function (_, scheme, host) {\n      return scheme.toLowerCase() + &#x27;:\/\/&#x27; + host.toLowerCase();\n    });\n}\n\n\/**\n * Google API\u306eJSON\u30a8\u30e9\u30fc\u304b\u3089\u4eba\u9593\u304c\u8aad\u3081\u308bmessage\u3060\u3051\u3092\u53d6\u308a\u51fa\u3059\u3002\n *\/\nfunction extractApiErrorMessage_(res) {\n  const text = res.getContentText() || &#x27;&#x27;;\n  try {\n    const body = JSON.parse(text);\n    if (body.error &amp;&amp; body.error.message) {\n      return body.error.message;\n    }\n  } catch (e) {\n    \/\/ JSON\u3067\u306f\u306a\u3044\u5834\u5408\u306f\u4e0b\u306e\u77ed\u7e2e\u30c6\u30ad\u30b9\u30c8\u3092\u4f7f\u3046\u3002\n  }\n  return text.slice(0, 300);\n}\n\nfunction formatRewriteCandidates_(candidates) {\n  const lines = candidates.slice(0, ANALYSIS_OPTIONS.rewriteLimit).map(function (item, index) {\n    const cur = item.current;\n    const prev = item.previous;\n    const trendText = prev.impressions &gt; 0\n      ? &#x27;\\n         \u524d\u9031\u6bd4: \u8868\u793a &#x27; + formatNumber_(prev.impressions) + &#x27; \u2192 &#x27; + formatNumber_(cur.impressions)\n        + &#x27; \/ \u30af\u30ea\u30c3\u30af &#x27; + formatNumber_(prev.clicks) + &#x27; \u2192 &#x27; + formatNumber_(cur.clicks)\n      : &#x27;&#x27;;\n\n    return (index + 1) + &#x27;. &#x27; + item.page\n      + &#x27;\\n         \u5bfe\u8c61\u30af\u30a8\u30ea: &quot;&#x27; + item.query + &#x27;&quot;&#x27;\n      + &#x27;\\n         \u7406\u7531: &#x27; + item.reasons.join(&#x27; \/ &#x27;)\n      + &#x27;\\n         \u73fe\u5728: \u8868\u793a &#x27; + formatNumber_(cur.impressions)\n      + &#x27; \/ \u30af\u30ea\u30c3\u30af &#x27; + formatNumber_(cur.clicks)\n      + &#x27; \/ CTR &#x27; + formatPct_(cur.ctr * 100)\n      + &#x27; \/ \u9806\u4f4d &#x27; + formatPosition_(cur.position)\n      + trendText\n      + &#x27;\\n         \u63d0\u6848: \u30bf\u30a4\u30c8\u30eb\u30fb\u5c0e\u5165\u6587\u30fb\u898b\u51fa\u3057\u3092\u4e3b\u30af\u30a8\u30ea\u306e\u691c\u7d22\u610f\u56f3\u306b\u5bc4\u305b\u3066\u66f4\u65b0&#x27;;\n  });\n\n  return &#x27;? \u30ea\u30e9\u30a4\u30c8\u5019\u88dc\uff08\u512a\u5148&#x27; + lines.length + &#x27;\u4ef6\uff09\\n      &#x27; + lines.join(&#x27;\\n      &#x27;);\n}\n\nfunction formatDecliningPages_(items) {\n  const lines = items.slice(0, ANALYSIS_OPTIONS.declineLimit).map(function (item, index) {\n    const cur = item.current;\n    const prev = item.previous;\n    const queryText = item.topQuery ? &#x27;\\n         \u4e3b\u30af\u30a8\u30ea: &quot;&#x27; + item.topQuery.query + &#x27;&quot;&#x27; : &#x27;&#x27;;\n    const indexText = item.disappeared ? &#x27;\\n         \u30e1\u30e2: \u8868\u793a\u304c\u307b\u307c\u6d88\u3048\u3066\u3044\u308b\u306e\u3067\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u691c\u67fb\u5bfe\u8c61\u306b\u8ffd\u52a0&#x27; : &#x27;&#x27;;\n\n    return (index + 1) + &#x27;. &#x27; + item.page\n      + &#x27;\\n         \u8868\u793a: &#x27; + formatNumber_(prev.impressions) + &#x27; \u2192 &#x27; + formatNumber_(cur.impressions)\n      + &#x27;\uff08&#x27; + formatSignedPct_(item.impressionDrop) + &#x27;\uff09&#x27;\n      + &#x27; \/ \u30af\u30ea\u30c3\u30af: &#x27; + formatNumber_(prev.clicks) + &#x27; \u2192 &#x27; + formatNumber_(cur.clicks)\n      + &#x27;\uff08&#x27; + formatSignedPct_(item.clickDrop) + &#x27;\uff09&#x27;\n      + queryText\n      + indexText;\n  });\n\n  return &#x27;? \u843d\u3061\u8fbc\u307f\u30da\u30fc\u30b8\uff08\u524d\u9031\u6bd4\uff09\\n      &#x27; + lines.join(&#x27;\\n      &#x27;);\n}\n\nfunction formatRankDrops_(items) {\n  const lines = items.slice(0, ANALYSIS_OPTIONS.rankDropLimit).map(function (item, index) {\n    return (index + 1) + &#x27;. &#x27; + item.page\n      + &#x27;\\n         \u30af\u30a8\u30ea: &quot;&#x27; + item.query + &#x27;&quot;&#x27;\n      + &#x27;\\n         \u9806\u4f4d: &#x27; + formatPosition_(item.previous.position) + &#x27; \u2192 &#x27; + formatPosition_(item.current.position)\n      + &#x27;\uff08+&#x27; + item.positionDrop.toFixed(1) + &#x27;\uff09&#x27;\n      + &#x27; \/ \u8868\u793a: &#x27; + formatNumber_(item.previous.impressions) + &#x27; \u2192 &#x27; + formatNumber_(item.current.impressions);\n  });\n  return &#x27;? \u9806\u4f4d\u6025\u843d\u30af\u30a8\u30ea\\n      &#x27; + lines.join(&#x27;\\n      &#x27;);\n}\n\nfunction formatQueryDiffs_(newQueries, lostQueries) {\n  const blocks = &#91;&#93;;\n  if (newQueries.length &gt; 0) {\n    blocks.push(&#x27;\u65b0\u898f\u30af\u30a8\u30ea\\n      &#x27; + newQueries.slice(0, ANALYSIS_OPTIONS.queryDiffLimit).map(function (item, index) {\n      return (index + 1) + &#x27;. &quot;&#x27; + item.query + &#x27;&quot;&#x27;\n        + &#x27; \/ \u8868\u793a &#x27; + formatNumber_(item.current.impressions)\n        + &#x27; \/ \u9806\u4f4d &#x27; + formatPosition_(item.current.position)\n        + &#x27;\\n         &#x27; + item.page;\n    }).join(&#x27;\\n      &#x27;));\n  }\n  if (lostQueries.length &gt; 0) {\n    blocks.push(&#x27;\u6d88\u5931\u30af\u30a8\u30ea\\n      &#x27; + lostQueries.slice(0, ANALYSIS_OPTIONS.queryDiffLimit).map(function (item, index) {\n      return (index + 1) + &#x27;. &quot;&#x27; + item.query + &#x27;&quot;&#x27;\n        + &#x27; \/ \u524d\u9031\u8868\u793a &#x27; + formatNumber_(item.previous.impressions)\n        + &#x27; \/ \u524d\u9031\u9806\u4f4d &#x27; + formatPosition_(item.previous.position)\n        + &#x27;\\n         &#x27; + item.page;\n    }).join(&#x27;\\n      &#x27;));\n  }\n  return &#x27;? \u65b0\u898f\/\u6d88\u5931\u30af\u30a8\u30ea\\n      &#x27; + blocks.join(&#x27;\\n      &#x27;);\n}\n\nfunction formatDeviceGaps_(items) {\n  const lines = items.slice(0, ANALYSIS_OPTIONS.deviceGapLimit).map(function (item, index) {\n    return (index + 1) + &#x27;. &#x27; + item.page\n      + &#x27;\\n         PC &#x27; + formatPosition_(item.desktop.position)\n      + &#x27; \/ \u30e2\u30d0\u30a4\u30eb &#x27; + formatPosition_(item.mobile.position)\n      + &#x27;\uff08\u5dee +&#x27; + item.gap.toFixed(1) + &#x27;\uff09&#x27;\n      + &#x27; \/ \u30e2\u30d0\u30a4\u30eb\u8868\u793a &#x27; + formatNumber_(item.mobile.impressions);\n  });\n  return &#x27;? \u30e2\u30d0\u30a4\u30eb\u3060\u3051\u9806\u4f4d\u304c\u5f31\u3044\u30da\u30fc\u30b8\\n      &#x27; + lines.join(&#x27;\\n      &#x27;);\n}\n\nfunction formatIndexIssues_(items) {\n  const lines = items.slice(0, ANALYSIS_OPTIONS.indexAlertLimit).map(function (item, index) {\n    return (index + 1) + &#x27;. &#x27; + item.url\n      + &#x27;\\n         \u7406\u7531: &#x27; + item.reasons.join(&#x27; \/ &#x27;);\n  });\n  return &#x27;? \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u8981\u78ba\u8a8dURL\\n      &#x27; + lines.join(&#x27;\\n      &#x27;);\n}\n\nfunction formatNumber_(value) {\n  return Math.round(Number(value || 0)).toLocaleString(&#x27;ja-JP&#x27;);\n}\n\nfunction formatPct_(value) {\n  return Number(value || 0).toFixed(1) + &#x27;%&#x27;;\n}\n\nfunction formatSignedPct_(value) {\n  const rounded = Math.round(Number(value || 0));\n  return (rounded &gt; 0 ? &#x27;+&#x27; : &#x27;&#x27;) + rounded + &#x27;%&#x27;;\n}\n\nfunction formatPosition_(value) {\n  return Number(value || 0).toFixed(1) + &#x27;\u4f4d&#x27;;\n}\n\nfunction logSiteAnalysisSummary_(site, periods, current, previous, summary) {\n  const limitNotes = &#91;&#93;;\n  if (summary.currentPages.length &gt;= ANALYSIS_OPTIONS.pageMaxRows) {\n    limitNotes.push(&#x27;\u5f53\u9031\u30da\u30fc\u30b8\u884c&#x27;);\n  }\n  if (summary.previousPages.length &gt;= ANALYSIS_OPTIONS.pageMaxRows) {\n    limitNotes.push(&#x27;\u524d\u9031\u30da\u30fc\u30b8\u884c&#x27;);\n  }\n  if (summary.currentPageQueries.length &gt;= ANALYSIS_OPTIONS.queryMaxRows) {\n    limitNotes.push(&#x27;\u5f53\u9031\u30da\u30fc\u30b8\u00d7\u30af\u30a8\u30ea\u884c&#x27;);\n  }\n  if (summary.previousPageQueries.length &gt;= ANALYSIS_OPTIONS.queryMaxRows) {\n    limitNotes.push(&#x27;\u524d\u9031\u30da\u30fc\u30b8\u00d7\u30af\u30a8\u30ea\u884c&#x27;);\n  }\n  if (summary.currentPageDevices.length &gt;= ANALYSIS_OPTIONS.deviceMaxRows) {\n    limitNotes.push(&#x27;\u30da\u30fc\u30b8\u00d7\u30c7\u30d0\u30a4\u30b9\u884c&#x27;);\n  }\n\n  Logger.log(&#x27;\u3010\u5206\u6790\u30b5\u30de\u30ea\u30fc\u3011&#x27; + site.name\n    + &#x27; \/ \u671f\u9593: &#x27; + periods.thisStart + &#x27;\u301c&#x27; + periods.thisEnd\n    + &#x27; vs &#x27; + periods.prevStart + &#x27;\u301c&#x27; + periods.prevEnd\n    + &#x27; \/ \u6761\u4ef6: searchType=&#x27; + ANALYSIS_OPTIONS.searchType\n    + &#x27;, country=&#x27; + (ANALYSIS_OPTIONS.countryFilter || &#x27;all&#x27;)\n    + &#x27; \/ \u5168\u4f53: \u30af\u30ea\u30c3\u30af &#x27; + formatNumber_(previous.clicks) + &#x27;\u2192&#x27; + formatNumber_(current.clicks)\n    + &#x27;, \u8868\u793a &#x27; + formatNumber_(previous.impressions) + &#x27;\u2192&#x27; + formatNumber_(current.impressions)\n    + &#x27;, \u9806\u4f4d &#x27; + formatPosition_(previous.position) + &#x27;\u2192&#x27; + formatPosition_(current.position)\n    + &#x27; \/ \u53d6\u5f97\u884c: \u30da\u30fc\u30b8 &#x27; + summary.currentPages.length + &#x27;\/&#x27; + summary.previousPages.length\n    + &#x27;, \u30da\u30fc\u30b8\u00d7\u30af\u30a8\u30ea &#x27; + summary.currentPageQueries.length + &#x27;\/&#x27; + summary.previousPageQueries.length\n    + &#x27;, \u30da\u30fc\u30b8\u00d7\u30c7\u30d0\u30a4\u30b9 &#x27; + summary.currentPageDevices.length\n    + &#x27; \/ \u5019\u88dc: \u30ea\u30e9\u30a4\u30c8 &#x27; + summary.queryAnalysis.rewriteCandidates.length\n    + &#x27;, \u843d\u3061\u8fbc\u307f &#x27; + summary.pageAnalysis.decliningPages.length\n    + &#x27;, \u9806\u4f4d\u6025\u843d &#x27; + summary.queryAnalysis.rankDrops.length\n    + &#x27;, \u65b0\u898f &#x27; + summary.queryAnalysis.newQueries.length\n    + &#x27;, \u6d88\u5931 &#x27; + summary.queryAnalysis.lostQueries.length\n    + &#x27;, \u30e2\u30d0\u30a4\u30eb\u5dee &#x27; + summary.deviceGaps.length\n    + &#x27;, \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u8981\u78ba\u8a8d &#x27; + summary.indexIssues.length + &#x27;\/&#x27; + summary.inspectionTargets.length\n    + &#x27;, Slack\u9805\u76ee &#x27; + summary.issueCount\n    + (limitNotes.length &gt; 0 ? &#x27; \/ \u6ce8\u610f: &#x27; + limitNotes.join(&#x27;, &#x27;) + &#x27;\u304c\u53d6\u5f97\u4e0a\u9650\u306b\u5230\u9054&#x27; : &#x27;&#x27;));\n}\n\n\n\/\/ ============================================================\n\/\/  Slack \u901a\u77e5\n\/\/ ============================================================\n\n\/**\n * \u7570\u5e38\u60c5\u5831\u304b\u3089Slack\u7528\u30e1\u30c3\u30bb\u30fc\u30b8\u6587\u5b57\u5217\u3092\u7d44\u307f\u7acb\u3066\u308b\u3002\n *\/\nfunction buildSlackMessage_(allAlerts, errors) {\n  const tz = Session.getScriptTimeZone();\n  const today = Utilities.formatDate(new Date(), tz, &#x27;yyyy\/MM\/dd&#x27;);\n\n  let msg = &#x27;? *GSC\u5206\u6790\u30ec\u30dd\u30fc\u30c8* \uff08&#x27; + today + &#x27;\uff09\\n&#x27;;\n\n  allAlerts.forEach(function (a) {\n    msg += &#x27;\\n*\u25a0 &#x27; + a.siteName + &#x27;*\\n&#x27;;\n    a.issues.forEach(function (issue) {\n      msg += &#x27;   \u2022 &#x27; + issue + &#x27;\\n&#x27;;\n    });\n  });\n\n  if (errors.length &gt; 0) {\n    msg += &#x27;\\n*\u25a0 \u30c1\u30a7\u30c3\u30af\u306b\u5931\u6557\u3057\u305f\u30b5\u30a4\u30c8*\\n&#x27;;\n    errors.forEach(function (e) {\n      msg += &#x27;   \u2022 &#x27; + e + &#x27;\\n&#x27;;\n    });\n  }\n\n  return msg;\n}\n\n\/** Slack\u306b\u6295\u7a3f\u3059\u308b\uff08Bot Token \/ chat.postMessage \u65b9\u5f0f\uff09\u3002 *\/\nfunction postSlack_(text) {\n  const props = PropertiesService.getScriptProperties();\n  const token   = props.getProperty(&#x27;SLACK_BOT_TOKEN&#x27;);\n  const channel = props.getProperty(&#x27;SLACK_CHANNEL&#x27;);\n\n  if (!token) {\n    throw new Error(&#x27;\u30b9\u30af\u30ea\u30d7\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3 SLACK_BOT_TOKEN \u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002&#x27;);\n  }\n  if (!channel) {\n    throw new Error(&#x27;\u30b9\u30af\u30ea\u30d7\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3 SLACK_CHANNEL \u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002&#x27;);\n  }\n\n  const res = UrlFetchApp.fetch(&#x27;https:\/\/slack.com\/api\/chat.postMessage&#x27;, {\n    method: &#x27;post&#x27;,\n    contentType: &#x27;application\/json; charset=utf-8&#x27;,\n    headers: { Authorization: &#x27;Bearer &#x27; + token },\n    payload: JSON.stringify({\n      channel: channel,\n      text: text,\n      unfurl_links: false,  \/\/ URL\u306e\u30d7\u30ec\u30d3\u30e5\u30fc\u5c55\u958b\u3092\u6291\u5236\n    }),\n    muteHttpExceptions: true,\n  });\n\n  \/\/ Slack API\u306f HTTP 200 \u3067\u3082 body \u306e ok:false \u3067\u30a8\u30e9\u30fc\u3092\u8fd4\u3059\u306e\u3067\u4e21\u65b9\u30c1\u30a7\u30c3\u30af\n  const body = JSON.parse(res.getContentText() || &#x27;{}&#x27;);\n  if (res.getResponseCode() !== 200 || body.ok !== true) {\n    throw new Error(&#x27;Slack\u6295\u7a3f\u5931\u6557: &#x27; + (body.error || res.getContentText()));\n  }\n}\n\n\n\/\/ ============================================================\n\/\/  \u30c8\u30ea\u30ac\u30fc\u8a2d\u5b9a \/ \u30c6\u30b9\u30c8\u7528\n\/\/ ============================================================\n\n\/**\n * \u6bce\u9031\u6708\u66dc8\u6642\u306e\u81ea\u52d5\u5b9f\u884c\u30c8\u30ea\u30ac\u30fc\u3092\u767b\u9332\u3059\u308b\uff08\u6700\u521d\u306b\u4e00\u5ea6\u3060\u3051\u5b9f\u884c\uff09\u3002\n * \u65e2\u5b58\u306e\u540c\u540d\u30c8\u30ea\u30ac\u30fc\u304c\u3042\u308c\u3070\u4f5c\u308a\u76f4\u3059\u3002\n *\/\nfunction setupTrigger() {\n  ScriptApp.getProjectTriggers().forEach(function (t) {\n    if (t.getHandlerFunction() === &#x27;checkNow&#x27;) {\n      ScriptApp.deleteTrigger(t);\n    }\n  });\n  ScriptApp.newTrigger(&#x27;checkNow&#x27;)\n    .timeBased()\n    .onWeekDay(ScriptApp.WeekDay.MONDAY)\n    .atHour(8)\n    .create();\n  Logger.log(&#x27;\u6bce\u9031\u6708\u66dc8\u6642\u306e\u30c8\u30ea\u30ac\u30fc\u3092\u767b\u9332\u3057\u307e\u3057\u305f\u3002&#x27;);\n}\n\n\/**\n * \u901a\u77e5\u306e\u30c6\u30b9\u30c8\u7528\u3002\u5b9f\u969b\u306e\u7570\u5e38\u6709\u7121\u306b\u95a2\u308f\u3089\u305a\u3001\n * \u3044\u307e\u53d6\u5f97\u3067\u304d\u308b\u6570\u5024\u3092Slack\u306b\u9001\u3063\u3066\u914d\u7dda\u3092\u78ba\u8a8d\u3059\u308b\u3002\n *\/\nfunction testNotify() {\n  const lines = &#91;&#93;;\n  SITES.forEach(function (site) {\n    try {\n      const p = getComparePeriods_();\n      const cur = fetchPerformanceTotals_(site.property, p.thisStart, p.thisEnd);\n      lines.push(&#x27;\u25a0 &#x27; + site.name + &#x27;\\n   \u4eca\u9031: \u30af\u30ea\u30c3\u30af &#x27; + cur.clicks\n        + &#x27; \/ \u8868\u793a &#x27; + cur.impressions\n        + &#x27; \/ \u9806\u4f4d &#x27; + cur.position.toFixed(1));\n    } catch (e) {\n      lines.push(&#x27;\u25a0 &#x27; + site.name + &#x27;\\n   \u53d6\u5f97\u30a8\u30e9\u30fc: &#x27; + e.message);\n    }\n  });\n  postSlack_(&#x27;\u2705 *GSC\u76e3\u8996\u30c4\u30fc\u30eb \u63a5\u7d9a\u30c6\u30b9\u30c8*\\n\\n&#x27; + lines.join(&#x27;\\n&#x27;));\n  Logger.log(&#x27;\u30c6\u30b9\u30c8\u901a\u77e5\u3092\u9001\u4fe1\u3057\u307e\u3057\u305f\u3002&#x27;);\n}\n\n<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">\u30b9\u30c6\u30c3\u30d710\uff1a\u624b\u52d5\u5b9f\u884c\u3057\u3066\u6a29\u9650\u3092\u627f\u8a8d\u3059\u308b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u3044\u3088\u3044\u3088\u5b9f\u884c\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6e96\u5099\u304c\u6574\u3063\u305f\u306e\u3067\u3001\u307e\u305a <code>checkNow<\/code> \u3092\u624b\u52d5\u3067\u8d70\u3089\u305b\u3066<strong>\u6a29\u9650\u627f\u8a8d<\/strong>\u3092\u6e08\u307e\u305b\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GAS\u30a8\u30c7\u30a3\u30bf\u4e0a\u90e8\u306e\u95a2\u6570\u9078\u629e\u30d7\u30eb\u30c0\u30a6\u30f3\u3067\u300c<strong><code>checkNow<\/code><\/strong>\u300d\u3092\u9078\u3073\u3001\u300c<strong>\u5b9f\u884c<\/strong>\u300d\u3092\u62bc\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u521d\u56de\u5b9f\u884c\u6642\u3001\u300c<strong>\u627f\u8a8d\u304c\u5fc5\u8981\u3067\u3059<\/strong>\u300d\u3068\u3044\u3046\u30c0\u30a4\u30a2\u30ed\u30b0\u304c\u51fa\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u3053\u3067\u627f\u8a8d\u3059\u308b\u6a29\u9650\u306e\u4e2d\u8eab\u306f\u3001\u30b9\u30c6\u30c3\u30d76\u3067 <code>appsscript.json<\/code> \u306b\u66f8\u3044\u305f\u30b9\u30b3\u30fc\u30d7\u304c\u305d\u306e\u307e\u307e\u53cd\u6620\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u300c<strong>\u6a29\u9650\u3092\u78ba\u8a8d<\/strong>\u300d\u3092\u30af\u30ea\u30c3\u30af<\/li>\n\n\n\n<li>\u30a2\u30ab\u30a6\u30f3\u30c8\u9078\u629e\u753b\u9762\u3067\u3001<strong>\u3053\u306e\u30c4\u30fc\u30eb\u3092\u52d5\u304b\u3059Google\u30a2\u30ab\u30a6\u30f3\u30c8<\/strong>\uff08\uff1d\u30b9\u30c6\u30c3\u30d73\u3067\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc\u306b\u5165\u308c\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\uff09\u3092\u9078\u629e<\/li>\n\n\n\n<li>\u300c<strong>\u3053\u306e\u30a2\u30d7\u30ea\u306fGoogle\u3067\u78ba\u8a8d\u3055\u308c\u3066\u3044\u307e\u305b\u3093<\/strong>\u300d\u3068\u3044\u3046\u8b66\u544a\u304c\u51fa\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u81ea\u5206\u3067\u4f5c\u3063\u305f\u30c6\u30b9\u30c8\u30b9\u30c6\u30fc\u30bf\u30b9\u306e\u30a2\u30d7\u30ea\u3067\u306f\u6b63\u5e38\u306a\u6319\u52d5\u3067\u3059\u3002\u300c<strong>\u8a73\u7d30<\/strong>\u300d\u3092\u30af\u30ea\u30c3\u30af \u2192\u300c<strong>\uff08\u30a2\u30d7\u30ea\u540d\uff09\u306b\u79fb\u52d5\uff08\u5b89\u5168\u3067\u306f\u306a\u3044\u30da\u30fc\u30b8\uff09<\/strong>\u300d\u3092\u30af\u30ea\u30c3\u30af<\/li>\n\n\n\n<li>\u300c\u25cb\u25cb\u304cGoogle\u30a2\u30ab\u30a6\u30f3\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u30ea\u30af\u30a8\u30b9\u30c8\u3057\u3066\u3044\u307e\u3059\u300d\u3068\u3044\u3046\u6a29\u9650\u4e00\u89a7\u304c\u51fa\u307e\u3059\u3002Search Console\u306e\u30c7\u30fc\u30bf\u95b2\u89a7\u3001\u5916\u90e8\u30b5\u30fc\u30d3\u30b9\u3078\u306e\u63a5\u7d9a\uff08<code>UrlFetchApp<\/code> \u7528\uff09\u306a\u3069\u304c\u4e26\u3073\u307e\u3059\u3002\u5185\u5bb9\u3092\u78ba\u8a8d\u3057\u3066\u300c<strong>\u8a31\u53ef<\/strong>\u300d<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u30b9\u30c6\u30c3\u30d73\u3067<strong>\u81ea\u5206\u3092\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc\u306b\u8ffd\u52a0\u3057\u3066\u3044\u306a\u3044\u3068<\/strong>\u3001\u3053\u3053\u3067\u300c\u30a2\u30af\u30bb\u30b9\u3092\u30d6\u30ed\u30c3\u30af\u3057\u307e\u3057\u305f\u300d\u3068\u8868\u793a\u3055\u308c\u3066\u5148\u306b\u9032\u3081\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u305d\u306e\u5834\u5408\u306f\u30b9\u30c6\u30c3\u30d73\u306b\u623b\u3063\u3066\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc\u767b\u9332\u3092\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">\u627f\u8a8d\u304c\u901a\u308b\u3068 <code>checkNow<\/code> \u304c\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b9f\u884c\u30ed\u30b0\uff08\u30a8\u30c7\u30a3\u30bf\u4e0b\u90e8\u3001\u307e\u305f\u306f\u300c\u5b9f\u884c\u6570\u300d\u30e1\u30cb\u30e5\u30fc\uff09\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u7570\u5e38\u304c\u691c\u77e5\u3055\u308c\u306a\u304b\u3063\u305f\u5834\u5408<\/strong>\uff1a\u300c\u5206\u6790\u5019\u88dc\u306a\u3057\u3002\u901a\u77e5\u306f\u9001\u4fe1\u3057\u307e\u305b\u3093\u3002\u300d\u3068\u30ed\u30b0\u306b\u51fa\u307e\u3059\u3002\u3053\u308c\u306f\u6b63\u5e38\u3067\u3059\u3002\u3053\u306e\u30c4\u30fc\u30eb\u306f\u7570\u5e38\u304c\u306a\u3051\u308c\u3070Slack\u306b\u9001\u308a\u307e\u305b\u3093\u3002<\/li>\n\n\n\n<li><strong>\u7570\u5e38\u304c\u691c\u77e5\u3055\u308c\u305f\u5834\u5408<\/strong>\uff1aSlack\u306b\u30ec\u30dd\u30fc\u30c8\u304c\u5c4a\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30a8\u30e9\u30fc\u304c\u51fa\u305f\u5834\u5408<\/strong>\uff1a\u4e0b\u306e\u300c\u3064\u307e\u305a\u3044\u305f\u3068\u304d\u306e\u78ba\u8a8d\u30dd\u30a4\u30f3\u30c8\u300d\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u300c\u901a\u77e5\u304c\u6765\u306a\u3044\uff1d\u5931\u6557\u300d\u3067\u306f\u306a\u3044\u3001\u3068\u3044\u3046\u70b9\u3092\u899a\u3048\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5019\u88dc\u30bc\u30ed\u306e\u3068\u304d\u306b\u6c88\u9ed9\u3059\u308b\u306e\u304c\u3001\u3053\u306e\u30c4\u30fc\u30eb\u306e\u6b63\u3057\u3044\u6319\u52d5\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u30b9\u30c6\u30c3\u30d711\uff1a\u30c6\u30b9\u30c8\u901a\u77e5\u3067\u914d\u7dda\u3092\u78ba\u8a8d\u3059\u308b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u30b9\u30c6\u30c3\u30d710\u3067\u300c\u5206\u6790\u5019\u88dc\u306a\u3057\u300d\u3060\u3063\u305f\u5834\u5408\u3001Slack\u901a\u77e5\u306e\u7d4c\u8def\uff08\u30c8\u30fc\u30af\u30f3\u30fb\u30c1\u30e3\u30f3\u30cd\u30eb\u30fbBot\u62db\u5f85\uff09\u304c\u672c\u5f53\u306b\u6b63\u3057\u3044\u306e\u304b\u3001\u307e\u3060\u78ba\u8a8d\u3067\u304d\u3066\u3044\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u305d\u308c\u3092\u78ba\u304b\u3081\u308b\u306e\u304c <code>testNotify<\/code> \u95a2\u6570\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>testNotify<\/code> \u306f\u3001\u7570\u5e38\u306e\u6709\u7121\u306b\u95a2\u308f\u3089\u305a<strong>\u73fe\u5728\u306e\u6570\u5024\u3092\u305d\u306e\u307e\u307eSlack\u306b\u9001\u308b<\/strong>\u914d\u7dda\u78ba\u8a8d\u7528\u306e\u95a2\u6570\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u95a2\u6570\u9078\u629e\u30d7\u30eb\u30c0\u30a6\u30f3\u3067\u300c<strong><code>testNotify<\/code><\/strong>\u300d\u3092\u9078\u3073\u3001\u300c<strong>\u5b9f\u884c<\/strong>\u300d\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Slack\u306e\u901a\u77e5\u5148\u30c1\u30e3\u30f3\u30cd\u30eb\u306b\u3001\u5404\u30b5\u30a4\u30c8\u306e\u300c\u4eca\u9031\u306e\u30af\u30ea\u30c3\u30af\u6570\uff0f\u8868\u793a\u56de\u6570\uff0f\u9806\u4f4d\u300d\u304c\u307e\u3068\u307e\u3063\u305f\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u5c4a\u3051\u3070\u3001<strong>Slack\u9023\u643a\u306f\u5b8c\u5168\u306b\u6b63\u5e38<\/strong>\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5c4a\u304b\u306a\u3044\u5834\u5408\u306f\u3001\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3067\u539f\u56e0\u304c\u5206\u304b\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>not_in_channel<\/code> \u2026 \u30b9\u30c6\u30c3\u30d79\u306eBot\u62db\u5f85\u3092\u5fd8\u308c\u3066\u3044\u307e\u3059<\/li>\n\n\n\n<li><code>invalid_auth<\/code> \/ <code>not_authed<\/code> \u2026 <code>SLACK_BOT_TOKEN<\/code> \u304c\u9593\u9055\u3063\u3066\u3044\u308b\u304b\u3001<code>xoxb-<\/code> \u4ee5\u5916\u3092\u8cbc\u3063\u3066\u3044\u307e\u3059<\/li>\n\n\n\n<li><code>channel_not_found<\/code> \u2026 <code>SLACK_CHANNEL<\/code> \u306e\u5024\u304c\u9055\u3044\u307e\u3059\uff08<code>#<\/code> \u306e\u6709\u7121\u3001\u30c1\u30e3\u30f3\u30cd\u30eb\u540d\u306e\u30bf\u30a4\u30d7\u30df\u30b9\uff09<\/li>\n\n\n\n<li>\u300c\u30b9\u30af\u30ea\u30d7\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3 \uff5e \u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u300d \u2026 \u30b9\u30c6\u30c3\u30d78\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u540d\u306e\u30b9\u30da\u30eb\u9055\u3044<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><code>testNotify<\/code> \u304c\u6210\u529f\u3059\u308c\u3070\u3001\u30c7\u30fc\u30bf\u53d6\u5f97\uff08\u30b9\u30c6\u30c3\u30d710\uff09\u3068\u901a\u77e5\uff08\u30b9\u30c6\u30c3\u30d711\uff09\u306e\u4e21\u65b9\u304c\u78ba\u8a8d\u3067\u304d\u305f\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u30b9\u30c6\u30c3\u30d712\uff1a\u30c8\u30ea\u30ac\u30fc\u3092\u767b\u9332\u3057\u3066\u81ea\u52d5\u904b\u8ee2\u306b\u4e57\u305b\u308b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u6700\u5f8c\u306b\u3001\u6bce\u9031\u81ea\u52d5\u3067\u8d70\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u624b\u52d5\u3067 <code>setupTrigger<\/code> \u3092\u4e00\u5ea6\u3060\u3051\u5b9f\u884c\u3059\u308c\u3070\u3001\u30b3\u30fc\u30c9\u304c\u6642\u9593\u30c8\u30ea\u30ac\u30fc\u3092\u767b\u9332\u3057\u3066\u304f\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u95a2\u6570\u9078\u629e\u30d7\u30eb\u30c0\u30a6\u30f3\u3067\u300c<strong><code>setupTrigger<\/code><\/strong>\u300d\u3092\u9078\u3073\u3001\u300c<strong>\u5b9f\u884c<\/strong>\u300d\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30ed\u30b0\u306b\u300c\u6bce\u9031\u6708\u66dc8\u6642\u306e\u30c8\u30ea\u30ac\u30fc\u3092\u767b\u9332\u3057\u307e\u3057\u305f\u3002\u300d\u3068\u51fa\u308c\u3070\u5b8c\u4e86\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>setupTrigger<\/code> \u306f\u540c\u540d\u306e\u65e2\u5b58\u30c8\u30ea\u30ac\u30fc\u304c\u3042\u308c\u3070\u4f5c\u308a\u76f4\u3059\u306e\u3067\u3001\u4f55\u5ea6\u5b9f\u884c\u3057\u3066\u3082\u91cd\u8907\u767b\u9332\u3055\u308c\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u767b\u9332\u3055\u308c\u305f\u30c8\u30ea\u30ac\u30fc\u306f\u3001GAS\u30a8\u30c7\u30a3\u30bf\u5de6\u30e1\u30cb\u30e5\u30fc\u306e\u6642\u8a08\u30a2\u30a4\u30b3\u30f3\u300c<strong>\u30c8\u30ea\u30ac\u30fc<\/strong>\u300d\u304b\u3089\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>checkNow<\/code> \u304c\u300c\u9031\u30d9\u30fc\u30b9\u30fb\u6bce\u9031\u6708\u66dc\u30fb\u5348\u524d8\u6642\u301c9\u6642\u300d\u3067\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u306f\u305a\u3067\u3059\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u5b9f\u884c\u6642\u523b\u3092\u5909\u3048\u305f\u3044\u3068\u304d\u306f\u3001\u30b3\u30fc\u30c9\u306e <code>setupTrigger<\/code> \u5185\u306e <code>.onWeekDay(...)<\/code> \u3084 <code>.atHour(8)<\/code> \u3092\u66f8\u304d\u63db\u3048\u3066\u3001<code>setupTrigger<\/code> \u3092\u3082\u3046\u4e00\u5ea6\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30c8\u30ea\u30ac\u30fc\u753b\u9762\u304b\u3089\u624b\u3067\u7de8\u96c6\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3067\u5168\u5de5\u7a0b\u304c\u5b8c\u4e86\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6765\u9031\u306e\u6708\u66dc\u4ee5\u964d\u3001\u7570\u5e38\u304c\u691c\u77e5\u3055\u308c\u305f\u3068\u304d\u3060\u3051Slack\u306b\u30ec\u30dd\u30fc\u30c8\u304c\u5c4a\u304f\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u3064\u307e\u305a\u3044\u305f\u3068\u304d\u306e\u78ba\u8a8d\u30dd\u30a4\u30f3\u30c8<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3067\u3088\u304f\u51fa\u308b\u30a8\u30e9\u30fc\u3068\u5bfe\u51e6\u3092\u307e\u3068\u3081\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><code>HTTP 403<\/code>\uff08Search Analytics\u53d6\u5f97\u5931\u6557\uff09<\/strong> \u2014 \u591a\u304f\u306f\u30b9\u30b3\u30fc\u30d7\u5ba3\u8a00\uff08\u30b9\u30c6\u30c3\u30d76\uff09\u304bGCP\u9023\u643a\uff08\u30b9\u30c6\u30c3\u30d77\uff09\u306e\u554f\u984c\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2460<code>appsscript.json<\/code> \u306b <code>webmasters.readonly<\/code> \u3092\u5ba3\u8a00\u3057\u305f\u304b\u3001\u2461\u5ba3\u8a00\u5f8c\u306b\u518d\u5ea6 <code>checkNow<\/code> \u3092\u5b9f\u884c\u3057\u3066\u6a29\u9650\u3092\u518d\u627f\u8a8d\u3057\u305f\u304b\u3001\u2462GCP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067Search Console API\u3092\u6709\u52b9\u5316\u3057\u305f\u304b\u3001\u2463GAS\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8a2d\u5b9a\u3067\u305d\u306eGCP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u756a\u53f7\u3092\u7d10\u4ed8\u3051\u305f\u304b\u3001\u2464GAS\u3068GCP\u304c\u540c\u3058\u30a2\u30ab\u30a6\u30f3\u30c8\u304b\u3001\u3092\u9806\u306b\u78ba\u8a8d\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3042\u308f\u305b\u3066\u3001\u5b9f\u884c\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u30b5\u30c1\u30b3\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u3067\u300c\u30aa\u30fc\u30ca\u30fc\uff0f\u30d5\u30eb\u30e6\u30fc\u30b6\u30fc\u300d\u306b\u306a\u3063\u3066\u3044\u308b\u304b\u3082\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><code>HTTP 403<\/code>\uff08URL Inspection\u53d6\u5f97\u5931\u6557\uff09\u3060\u3051\u51fa\u308b<\/strong> \u2014 Search Analytics\u306f\u901a\u308b\u306e\u306bURL Inspection\u3060\u3051\u843d\u3061\u308b\u5834\u5408\u3001\u30b5\u30c1\u30b3\u3067\u306e\u6a29\u9650\u304c\u300c\u5236\u9650\u4ed8\u304d\u300d\u306e\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u300c\u30d5\u30eb\u30e6\u30fc\u30b6\u30fc\u300d\u4ee5\u4e0a\u306b\u5909\u66f4\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u300c\u30a2\u30af\u30bb\u30b9\u3092\u30d6\u30ed\u30c3\u30af\u3057\u307e\u3057\u305f\u300d\u300c\u3053\u306e\u30a2\u30d7\u30ea\u306f\u30c6\u30b9\u30c8\u4e2d\u3067\u3059\u300d\u300c<code>access_denied<\/code>\u300d<\/strong> \u2014 \u30b9\u30c6\u30c3\u30d73\u306e\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc\u306b\u3001\u3044\u307e\u627f\u8a8d\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u308b\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u5165\u3063\u3066\u3044\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Google Auth Platform\u306e\u300c\u5bfe\u8c61\u300d\u306b\u623b\u3063\u3066\u8ffd\u52a0\u3059\u308b\u304b\u3001\u6b63\u3057\u3044\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u627f\u8a8d\u3057\u76f4\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u30b9\u30b3\u30fc\u30d7\u3092\u8db3\u3057\u305f\u306e\u306b <code>403<\/code> \u304c\u6d88\u3048\u306a\u3044<\/strong> \u2014 <code>appsscript.json<\/code> \u3092\u7de8\u96c6\u3057\u305f\u3060\u3051\u3067\u306f\u3001\u3059\u3067\u306b\u627f\u8a8d\u6e08\u307f\u306e\u30c8\u30fc\u30af\u30f3\u306b\u306f\u53cd\u6620\u3055\u308c\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3082\u3046\u4e00\u5ea6 <code>checkNow<\/code> \u3092\u624b\u52d5\u5b9f\u884c\u3057\u3066\u3001\u8ffd\u52a0\u30b9\u30b3\u30fc\u30d7\u306e\u627f\u8a8d\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u901a\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><code>property<\/code> \u95a2\u9023\u3067\u30c7\u30fc\u30bf\u304c0\u884c<\/strong> \u2014 <code>SITES<\/code> \u306e <code>property<\/code> \u6587\u5b57\u5217\u304c\u3001\u30b5\u30c1\u30b3\u306e\u767b\u9332\u3068\u5b8c\u5168\u4e00\u81f4\u3057\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>sc-domain:<\/code> \u306e\u4ed8\u3051\u5fd8\u308c\u3001URL\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u578b\u306e\u672b\u5c3e\u30b9\u30e9\u30c3\u30b7\u30e5\u629c\u3051\u304c\u5b9a\u756a\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u30c7\u30fc\u30bf\u306f\u3042\u308b\u306f\u305a\u306a\u306e\u306b\u300c\u5206\u6790\u5019\u88dc\u306a\u3057\u300d\u304c\u7d9a\u304f<\/strong> \u2014 \u3053\u308c\u306f\u30a8\u30e9\u30fc\u3067\u306f\u306a\u304f\u3001<code>THRESHOLDS<\/code> \u306e\u3057\u304d\u3044\u5024\u306b\u5c4a\u304f\u5909\u5316\u304c\u5b9f\u969b\u306b\u7121\u3044\u3060\u3051\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6319\u52d5\u3092\u898b\u305f\u3044\u306a\u3089\u3001\u4e00\u6642\u7684\u306b <code>THRESHOLDS<\/code> \u306e <code>siteClickDropPct<\/code> \u306a\u3069\u3092\u5c0f\u3055\u3044\u5024\u306b\u3057\u3066\u5b9f\u884c\u3059\u308b\u3068\u3001\u5224\u5b9a\u306e\u52d5\u304d\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u78ba\u8a8d\u5f8c\u306f\u5143\u306b\u623b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5b9f\u884c\u6642\u9593\u304c6\u5206\u3067\u6253\u3061\u5207\u3089\u308c\u308b<\/strong> \u2014 \u76e3\u8996\u30b5\u30a4\u30c8\u6570\u304c\u591a\u3044\u3001\u307e\u305f\u306f1\u30b5\u30a4\u30c8\u306e\u30c7\u30fc\u30bf\u91cf\u304c\u975e\u5e38\u306b\u5927\u304d\u3044\u5834\u5408\u306b\u8d77\u3053\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>SITES<\/code> \u3092\u5206\u5272\u3057\u3066\u5225\u30c8\u30ea\u30ac\u30fc\u306b\u3059\u308b\u3001<code>ANALYSIS_OPTIONS<\/code> \u306e <code>maxUrlInspectionsPerSite<\/code> \u3092\u6e1b\u3089\u3059\u3001\u306a\u3069\u30671\u56de\u3042\u305f\u308a\u306e\u51e6\u7406\u3092\u8efd\u304f\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u307e\u3068\u3081\uff1a\u4e00\u5ea6\u901a\u305b\u3070\u3001\u3042\u3068\u306f\u8ffd\u52a0\u3059\u308b\u3060\u3051<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u306e\u5c71\u306f4\u3064\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>GCP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u3063\u3066API\u3092\u6709\u52b9\u5316\u3059\u308b\u3053\u3068<\/strong>\u3001<strong>OAuth\u540c\u610f\u753b\u9762\u306e\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc\u306b\u81ea\u5206\u3092\u5165\u308c\u308b\u3053\u3068<\/strong>\u3001<strong>appsscript.json \u306b <code>webmasters.readonly<\/code> \u3092\u5ba3\u8a00\u3059\u308b\u3053\u3068<\/strong>\u3001<strong>GAS\u3068GCP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u756a\u53f7\u3067\u7d10\u4ed8\u3051\u308b\u3053\u3068<\/strong>\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e4\u3064\u3055\u3048\u8d8a\u3048\u308c\u3070\u3001\u3042\u3068\u306fSlack\u306e\u8a2d\u5b9a\u3068\u30c8\u30ea\u30ac\u30fc\u767b\u9332\u3067\u52d5\u304d\u51fa\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u305d\u3057\u3066\u4e00\u5ea6\u3053\u306e\u57fa\u76e4\u304c\u3067\u304d\u3066\u3057\u307e\u3048\u3070\u3001\u76e3\u8996\u30b5\u30a4\u30c8\u3092\u5897\u3084\u3059\u306e\u306f <code>SITES<\/code> \u914d\u5217\u306b\u6570\u884c\u8db3\u3059\u3060\u3051\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GCP\u3082Slack\u3082\u4f5c\u308a\u76f4\u3059\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2\u30b5\u30a4\u30c8\u76ee\u30013\u30b5\u30a4\u30c8\u76ee\u306f\u3082\u306e\u306e\u6570\u5206\u3067\u8ffd\u52a0\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6bce\u9031\u3072\u3068\u3064\u305a\u3064\u30b5\u30c1\u30b3\u3092\u958b\u3044\u3066\u76ee\u8996\u3059\u308b\u4f5c\u696d\u304b\u3089\u89e3\u653e\u3055\u308c\u3066\u3001\u300c\u5bfe\u5fdc\u3059\u3079\u304d\u5909\u5316\u300d\u3060\u3051\u304c\u6708\u66dc\u306e\u671d\u306b\u5c4a\u304f\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u305d\u306e\u72b6\u614b\u307e\u3067\u3001\u3053\u306e\u624b\u9806\u3067\u8fbf\u308a\u7740\u3051\u308b\u306f\u305a\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u8a18\u4e8b\u3067\u7d39\u4ecb\u3057\u3066\u3044\u308b\u30b3\u30fc\u30c9\u306f\u3001GitHub\u306e<a href=\"https:\/\/github.com\/MOTOKI-LLC\/WAZA-code\/tree\/main\/gsc-anomaly-monitor-gas\">MOTOKI-LLC\/WAZA-code<\/a>\u306b\u3082\u307e\u3068\u3081\u3066\u3044\u307e\u3059\u3002<\/p>\n\n<h2 class=\"wp-block-heading\">URL\u6bd4\u8f03\u306e\u4fee\u6b63\u3068\u691c\u8a3c\u7bc4\u56f2<\/h2>\n<p class=\"wp-block-paragraph\">\u6b63\u898fURL\u306e\u6bd4\u8f03\u3067\u306f\u3001\u30db\u30b9\u30c8\u540d\u3060\u3051\u3092\u5c0f\u6587\u5b57\u5316\u3057\u3001\u30d1\u30b9\u306e\u5927\u6587\u5b57\u5c0f\u6587\u5b57\u30fb\u672b\u5c3e\u30b9\u30e9\u30c3\u30b7\u30e5\u30fb\u30af\u30a8\u30ea\u6587\u5b57\u5217\u3092\u7dad\u6301\u3057\u307e\u3059\u3002<\/p>\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3089\u3092\u3059\u3079\u3066\u524a\u9664\u30fb\u5c0f\u6587\u5b57\u5316\u3059\u308b\u3068\u3001\u7570\u306a\u308b\u30da\u30fc\u30b8\u3092\u540c\u3058URL\u3068\u3057\u3066\u6271\u3063\u3066\u6b63\u898fURL\u306e\u4e0d\u4e00\u81f4\u3092\u898b\u9003\u3059\u305f\u3081\u3067\u3059\u3002<\/p>\n<p class=\"wp-block-paragraph\">\u30d5\u30e9\u30b0\u30e1\u30f3\u30c8\u306f\u6bd4\u8f03\u304b\u3089\u5916\u3057\u307e\u3059\u304c\u3001\u30af\u30a8\u30ea\u306e\u4e26\u3073\u66ff\u3048\u306a\u3069\u3092\u542b\u3080\u5b8c\u5168\u306aURL\u540c\u5024\u5224\u5b9a\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n<p class=\"wp-block-paragraph\">\u6bd4\u8f03\u95a2\u6570\u3092Node.js\u3067\u691c\u8a3c\u3057\u3001Search Console\u8a8d\u8a3c\u30fb\u5b9f\u30c7\u30fc\u30bf\u53d6\u5f97\u30fb\u901a\u77e5\u306e\u9001\u4fe1\u306f\u4eca\u56de\u5b9f\u884c\u3057\u3066\u3044\u307e\u305b\u3093\u3002<\/p>\n<p class=\"wp-block-paragraph\">\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u5909\u66f4\u524d\u30b3\u30d4\u30fc\u3092\u4fdd\u5b58\u3057\u3001\u901a\u77e5\u5148\u3068\u5bfe\u8c61\u30b5\u30a4\u30c8\u3092\u691c\u8a3c\u7528\u306b\u9650\u5b9a\u3057\u3066\u7d50\u679c\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p class=\"wp-block-paragraph\">\u5143\u306b\u623b\u3059\u5834\u5408\u306f\u5909\u66f4\u524d\u30b3\u30d4\u30fc\u3092\u5fa9\u5143\u3057\u307e\u3059\u304c\u3001\u65e7\u6bd4\u8f03\u3067\u306f\u7570\u306a\u308bURL\u3092\u540c\u4e00\u8996\u3059\u308b\u5236\u7d04\u304c\u3042\u308b\u70b9\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Search Console\u3068GAS\u3092\u9023\u643a\u3057\u3066\u3001\u6307\u6a19\u3092\u6c7a\u3081\u3066\u76e3\u8996\u3059\u308b\u30c4\u30fc\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\u3002 GCP\u3092\u4f7f\u3044\u307e\u3059\u304c\u3001\u7121\u6599\u3067\u30c4\u30fc\u30eb\u3092\u4f5c\u308c\u307e\u3059\u3002 \u30d6\u30ed\u30b0\u904b\u55b6\u3092\u3067\u304d\u308b\u3060\u3051\u81ea\u52d5\u5316\u3057\u305f\u3044\u3068\u3044\u3046\u5834\u5408\u3001\u554f\u984c\u3092\u6d17\u3044\u51fa\u3059\u306e\u306b\u5c0e\u5165\u3059\u308b\u3068\u6700\u4f4e\u9650\u306e [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":27900,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"swell_btn_cv_data":"","book_review_data":"","footnotes":"","ssp_meta_title":"Search Console\u2502\u7570\u5e38\u3092\u6bce\u9031\u81ea\u52d5\u691c\u77e5\u3059\u308b\uff5c\u8907\u6570\u30b5\u30a4\u30c8\u5bfe\u5fdc\u306eSEO\u76e3\u8996\u30c4\u30fc\u30eb","ssp_meta_description":"Search Console\u306e\u30c7\u30fc\u30bf\u3092GAS\u3067\u6bd4\u8f03\u3059\u308b\u76e3\u8996\u30b9\u30af\u30ea\u30d7\u30c8\u3002URL\u306e\u30d1\u30b9\u30fb\u30af\u30a8\u30ea\u3092\u533a\u5225\u3057\u3001\u5019\u88dc\u62bd\u51fa\u3068\u5b9f\u30c7\u30fc\u30bf\u691c\u8a3c\u3092\u5206\u3051\u3066\u6271\u3044\u307e\u3059\u3002"},"categories":[83],"tags":[],"area":[],"class_list":["post-27880","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tools"],"_links":{"self":[{"href":"https:\/\/motoki-design.co.jp\/wordpress\/wp-json\/wp\/v2\/posts\/27880","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/motoki-design.co.jp\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/motoki-design.co.jp\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/motoki-design.co.jp\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/motoki-design.co.jp\/wordpress\/wp-json\/wp\/v2\/comments?post=27880"}],"version-history":[{"count":5,"href":"https:\/\/motoki-design.co.jp\/wordpress\/wp-json\/wp\/v2\/posts\/27880\/revisions"}],"predecessor-version":[{"id":29918,"href":"https:\/\/motoki-design.co.jp\/wordpress\/wp-json\/wp\/v2\/posts\/27880\/revisions\/29918"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/motoki-design.co.jp\/wordpress\/wp-json\/wp\/v2\/media\/27900"}],"wp:attachment":[{"href":"https:\/\/motoki-design.co.jp\/wordpress\/wp-json\/wp\/v2\/media?parent=27880"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/motoki-design.co.jp\/wordpress\/wp-json\/wp\/v2\/categories?post=27880"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/motoki-design.co.jp\/wordpress\/wp-json\/wp\/v2\/tags?post=27880"},{"taxonomy":"area","embeddable":true,"href":"https:\/\/motoki-design.co.jp\/wordpress\/wp-json\/wp\/v2\/area?post=27880"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}