コンテンツへスキップ

GoogleマップのAPIエラー:api keys with referer restrictions cannot be used with this api

公開日 /最終更新日

【結論】このエラーの原因と直し方(2026年9月追記)

「API keys with referer restrictions cannot be used with this API.」は、「HTTPリファラー(ウェブサイト)」制限をかけたAPIキーを、サーバー側から呼ぶAPI(Geocoding API など)に使ったときに出ます。サーバーからのリクエストにはリファラーが付かないため、リファラー制限のキーはそもそも使えません。

直し方は、サーバー用のAPIキーを別に作り、アプリケーションの制限を「IPアドレス」にすることです(詳しくは記事の後半「原因と正しい設定」を参照)。制限を追加したり時間を待ったりしても、キーの種類が合っていなければ直りません。

GoogleマップのAPIって使ったことありませんか?
登録したんですけどこのエラーが出るんですよ

api keys with referer restrictions cannot be used with this api

でエラーでググると制限をかけるように書いてありまして
制限をかけてもまだエラーが直らないんですよ
ちなみにハマってる人はたくさんいるみたいです
https://qiita.com/yoshiwo/items/0b4a84d2413a87218139
こちらを参考に制限かけようとしたらGeocoding APIがないどうしたらいいのか?

ググっているとこちらへたどり着く、

こちら参考

色々調べているとこちらのリンクが見つかり

https://console.cloud.google.com/apis/api/geocoding_backend/overview

実際は、

https://console.cloud.google.com/apis/library

こちらのリンクからAPIを探すのがいいですね。

選択中の API:
Directions API
Geocoding API
Geolocation API
Maps JavaScript API
Places API

いくら追加しても同じエラーが出るぞと友達に連絡してました。何時間か待っていたら使えるようになっていました。5分くらい待つと書いてありますが私の場合5分どころではありませんでした。

import requests
# from django.shortcuts import render

def display_map(location_name):
    # ジオコーディングを行うためのAPIキーを設定します
    api_key = 'your API key'

    # ジオコーディングAPIのURL
    geocoding_url = 'https://maps.googleapis.com/maps/api/geocode/json'

    # ジオコーディングを行う場所の名前(例: 八王子駅)
    # location_name = '八王子駅'

    # ジオコーディングAPIにリクエストを送信します
    response = requests.get(geocoding_url, params={'address': location_name, 'key': api_key})
    data = response.json()
    print(data)

    if data['status'] == 'OK':
        # ジオコーディングAPIから返された結果を解析し、緯度と経度を取得します
        latitude = data['results'][0]['geometry']['location']['lat']
        longitude = data['results'][0]['geometry']['location']['lng']

        context = {
            'latitude': latitude,
            'longitude': longitude,
        }
        return( context)
    else:
        # ジオコーディングが失敗した場合のエラーハンドリングを行います
        error_message = 'ジオコーディングが失敗しました'
        context = {
            'error_message': error_message,
        }
        return( context)

location_name = '八王子駅'
print(display_map(location_name))

上記コードを走らせると、こんな感じで出力されました。

{'results': [{'address_components': [{'long_name': 'Hachiōji Station', 'short_name': 'Hachiōji Station', 'types': ['establishment', 'point_of_interest', 'train_station', 'transit_station']}, {'long_name': '1', 'short_name': '1', 'types': ['political', 'sublocality', 'sublocality_level_4']}, {'long_name': '1丁目', 'short_name': '1丁目', 'types': ['political', 'sublocality', 'sublocality_level_3']}, {'long_name': 'Asahichō', 'short_name': 'Asahichō', 'types': ['political', 'sublocality', 'sublocality_level_2']}, {'long_name': 'Hachioji', 'short_name': 'Hachioji', 'types': ['locality', 'political']}, {'long_name': 'Tokyo', 'short_name': 'Tokyo', 'types': ['administrative_area_level_1', 'political']}, {'long_name': 'Japan', 'short_name': 'JP', 'types': ['country', 'political']}, {'long_name': '192-0083', 'short_name': '192-0083', 'types': ['postal_code']}], 'formatted_address': 'Hachiōji Station, 1丁目-1 Asahichō, Hachioji, Tokyo 192-0083, Japan', 'geometry': {'location': {'lat': 35.6556157, 'lng': 139.3388529}, 'location_type': 'ROOFTOP', 'viewport': {'northeast': {'lat': 35.6565716302915, 'lng': 139.3401072302915}, 'southwest': {'lat': 35.6538736697085, 'lng': 139.3374092697085}}}, 'partial_match': True, 'place_id': 'ChIJm3bo4tsdGWARdW7IcuYMzfE', 'plus_code': {'compound_code': 'M84Q+6G Hachioji, Tokyo, Japan', 'global_code': '8Q7XM84Q+6G'}, 'types': ['establishment', 'point_of_interest', 'train_station', 'transit_station']}], 'status': 'OK'}
{'latitude': 35.6556157, 'longitude': 139.3388529}

ようやくグーグル・マップのAPIが使えるようになりました。

原因と正しい設定(2026年9月追記)

記事を書いた当時は「制限をかける」「しばらく待つ」で動くようになりましたが、あらためて整理すると、原因と対処は次のとおりです。

なぜこのエラーが出るのか

Google Cloud のAPIキーには、2種類の制限があります。

  • アプリケーションの制限:どこから呼ばれたら許可するか(HTTPリファラー/IPアドレス/Androidアプリ/iOSアプリ/なし)
  • APIの制限:どのAPIに使ってよいか(Maps JavaScript API、Geocoding API など)

このうち「HTTPリファラー」制限は、ブラウザから呼ぶAPI(Maps JavaScript API など)専用です。この記事のPythonコードのように、サーバーから Geocoding API・Places API・Directions API などを呼ぶと、リクエストにリファラーが付かないため、今回のエラーで拒否されます。

正しい設定:キーを「ブラウザ用」と「サーバー用」に分ける

  1. ブラウザ用キー(地図を表示するだけ):アプリケーションの制限=「HTTPリファラー」、APIの制限=「Maps JavaScript API」
  2. サーバー用キー(Python・Django などから呼ぶ):アプリケーションの制限=「IPアドレス」(サーバーの送信元IP)、APIの制限=「Geocoding API」など実際に使うものだけ

1つのキーを両方に使い回そうとすると、どちらかで必ずエラーになります。

サーバーのIPアドレスが固定できない場合

PaaSや無料プランのサーバーでは、送信元IPが変わることがあります。その場合は、サーバー用キーのアプリケーションの制限を「なし」にします。代わりにAPIの制限を必ず絞り、Google Cloud コンソールの「割り当て」で1日の上限を低めに設定しておくと、キーが漏れたときの被害を抑えられます。このキーはブラウザ側のコード(JavaScript)には絶対に書かないでください。

似ているけれど別のエラー

  • RefererNotAllowedMapError:ブラウザ用キーの「許可するリファラー」に、そのページのURLが入っていません。https://example.com/* のようにワイルドカード付きで追加します。開発中は http://localhost:8000/* も追加が必要です。
  • This API project is not authorized to use this API.:そのAPIがプロジェクトで有効になっていません。「APIとサービス」→「ライブラリ」で Geocoding API などを有効にします。
  • REQUEST_DENIED(課金関連のメッセージ付き):プロジェクトに請求先アカウントが紐づいていません。

なお、キーの制限を変更してから反映されるまで、公式には「最大5分程度」かかるとされています。5分以上待っても直らない場合は、待つよりも上の設定を見直してください。

この仕組み、自社にも入れたい方へ

Posii株式会社は、生成AI・社内RAG・Djangoを使ったシステムを、設計から運用まで自社で作っている開発会社です。「うちの場合はどう作るか」「費用はどのくらいか」だけのご相談も承ります。

開発のご相談・お見積もり

最後までお読みいただき、心より感謝申し上げます。

大河原潤

大河原 潤

AI開発専門家

ブーム以前からAI研究に携わる、本物の専門家。「AIに使われる」のではなく、「AIを使いこなす」確かな技術力を提供します。

【アカデミックな裏付け】

  • カリフォルニア大学リバーサイド校 博士前期課程修了(研究分野:測度論、経路積分)
  • アメリカ数学会のジャーナルに論文発表

【社会的に認められた専門性】

  • AI関連書籍:『誤解だらけの人工知能』(2018年)、『AI×Web3の未来』(2023年)
  • プログラミング専門書:実務的な技術書を2冊出版(確かな実装力の証明)
  • 100社以上のAI導入コンサルティング実績、特許売却経験あり

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です