Google Webmaster Tools API - no puede obtener permisos para un dominio que poseo

Estoy usando esta biblioteca: https://github.com/googleapis/google-api-php-client

He creado un sencillo script PHP que contiene cierta información de Google Search Console / Webmaster Tools sobre el rendimiento de un dominio que poseo.

No tiene la intención de autentificar en nombre de un usuario que visita la página y posee su propio sitio web. Está destinado a mostrar información sobre MI sitio web y se identifica a través de una cuenta de servicio fijo. Más detalles abajo.

Aquí está el código PHP:

html


Google Webmaster Tools test


php
ini_set('display_errors', true);
error_reporting(E_ALL);

require_once ('./path/to/the/autoload.php');

echo "Instantiating client";

$client->setAuthConfig(json_decode($credentials,true));

$client->setScopes(['https://www.googleapis.com/auth/webmasters.readonly']);

$client->setAccessType('offline');

echo "Instantiating Webmasters service 
"; $service = new Google_Service_Webmasters($client); $query = new \Google_Service_Webmasters_SearchAnalyticsQueryRequest(); $date_now = date('Y-m-d'); $date_past = date('Y-m-d', time()-3600*24*30); $query->setStartDate($date_past); $query->setEndDate($date_now); $query->setDimensions(['page','query']); $query->setSearchType('web'); $pfilter=new \Google_Service_Webmasters_ApiDimensionFilter(); $pfilter->setDimension('page'); $pfilter->setOperator('equals'); $pfilter->setExpression('https://example.com/'); $fgroup= new Google_Service_Webmasters_ApiDimensionFilterGroup(); $fgroup->setFilters([$pfilter]); $query->setDimensionFilterGroups([$fgroup]); try { $u = $service->searchanalytics->query('https://example.com', $query); echo ''; echo ''; for ($i = 0; $i < count($u->rows); $i++) { echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; } echo '
#ClicksCTRImpPageKEYwordAvg. pos
$i{$u->rows[$i]->clicks}{$u->rows[$i]->ctr}{$u->rows[$i]->impressions}{$u->rows[$i]->keys[0]}{$u->rows[$i]->keys[1]}{$u->rows[$i]->position}
'; } catch(\Exception $e ) { echo $e->getMessage(); } ?>

Así que hice lo siguiente:

  • In Google Cloud Console He creado un proyecto y he habilitado la API de Google Search Console y también el Legacy sólo en caso de:

enter image description here

  • He creado un Cuenta de servicios para el proyecto:

enter image description here

  • Para la cuenta de servicio, he creado una clave:

enter image description here

Eso generó un Archivo de JSON que es el que cargue desde el código PHP anterior.

  • En Google Search Console Tengo un propiedad

enter image description here

cuya propiedad Verifiqué vía DNS. Como puede ver, puedo ver los datos en la interfaz web.

  • Accedí a lo antes mencionado Dirección de correo electrónico de la Cuenta de Servicio con FULL acceso

enter image description here

Sin embargo, cuando probé el guión arriba, obtengo el error:

{ "error": { "code": 403, "message": "User does not have sufficient permission for site 'https://********.com'. See also: https://support.google.com/webmasters/answer/2451999.", "errors": [ { "message": "User does not have sufficient permission for site 'https://*******.com'. See also: https://support.google.com/webmasters/answer/2451999.", "domain": "global", "reason": "forbidden" } ] } }

Obviamente la página del Centro de Ayuda no ayuda.

He hecho exactamente lo mismo con media docena de sitios web, todos con el mismo procedimiento, con el mismo proyecto, Cuenta de Servicio y credenciales, y funciona con la mayoría de ellos.

La única diferencia que puedo ver entre las propiedades con las que funciona y aquellas con las que no funciona, es que las que trabajan son propiedades que han existido durante años, mucho antes incluso he creado el proyecto de Google Cloud Platform; y no eran propiedades "dominio", sino basadas en url-prefix, es decir, propiedades que comienzan con https:// o simple http://, ya sea con o sin la www., y sólo funcionan con el protocolo correcto. Y en ellos, usted verifica la propiedad subiendo un archivo con una ruta y nombre dados que Google le da. Sin embargo, he intentado crear una propiedad como esa para el dominio más nuevo que estoy tratando de llegar a trabajar, y eso tampoco funciona.

Es casi como si el api de Google se negara a trabajar con propiedades creadas después de una determinada fecha.

NOTA: no me digas que necesito permisos del propietario en lugar de Full. Ya he probado eso (que sólo puedes hacer a través de una interfaz más antigua difícil de encontrar) y no hace ninguna diferencia en absoluto. Los sitios web más antiguos trabajan tanto con permisos Full y Owner; el nuevo no funciona con ninguno de los dos.

Pregunta hecha hace 3 años, 4 meses, 27 días - Por quantumcoder


3 Respuestas:

  • Encontré la respuesta aquí: Webmasters API El usuario no tiene suficiente permiso para el sitio(La respuesta de MartijnvdB en caso de que el vínculo profundo con la respuesta específica se rompa).

    Necesitaba cambiar esto:

    $u = $service->searchanalytics->query('https://example.com', $query);
    

    a esto:

    $u = $service->searchanalytics->query('sc-domain:example.com', $query);
    

    Hay dos tipos de propiedades de Google Search Console: tipo de dominio y tipo prefijo. Para propiedades de tipo de dominio que necesita pasar el nombre de la propiedad como https://www.example.com (con http o https, con o sin la www que coincida con el prefijo exacto de la propiedad). Para propiedades basadas en dominios que necesita pasarlo como sc-domain:example.com.

    Lo había intentado con example.com sin ningún tipo de prefijo, pero eso no funcionó. No sé por qué la API no puede aceptar eso y prependir sc-domain: cuando sea necesario.

    La biblioteca PHP tiene ninguna documentación, y la documentación de la propia API es increíblemente pobre también, como es habitual para Google APIs.

    Una vez que ya conoces la respuesta, puedes encontrarla documentada aquí:

    https://developers.google.com/webmaster-tools/search-console-api-original/v3/searchanalytics/query

    siteUrl string La URL de la propiedad tal como se define en Search Console. Ejemplos: http://www.example.com/ (para una propiedad URL-prefijo) o sc-dominio:example.com (para una propiedad de dominio)

    Note que dice "como se define en Search Console". Al navegar por la Consola de Búsqueda como usuario, nunca se ve el nombre de la propiedad como sc-domain:... En cualquier lugar.

    Respondida el Dec 18, 2020 a las 16:55 - por codecrusaderx

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás recibiendo indica que el usuario no tiene permisos suficientes para acceder al sitio web en la API de Google Webmaster Tools. Aquí hay algunas sugerencias para resolver este problema:

    • Verifica que la cuenta de servicio que estás utilizando tiene los permisos adecuados para acceder a la propiedad del sitio web en Google Webmaster Tools. Puedes verificar esto en la consola de Google Cloud Platform, en la sección de IAM y Administración de servicios.
    • Asegúrate de que la propiedad del sitio web en Google Webmaster Tools esté asociada a la misma cuenta de servicio que estás utilizando en tu script PHP. Esto es importante para que la API pueda acceder a los datos de la propiedad.
    • Revisa la configuración de permisos en la cuenta de servicio y asegúrate de que tenga los permisos necesarios para acceder a la API de Webmaster Tools. Puedes consultar la documentación de Google sobre cómo configurar los permisos adecuadamente.
    • Si has verificado todos los permisos y configuraciones y el problema persiste, podría ser útil contactar al soporte técnico de Google para obtener asistencia adicional. El error que estás viendo también proporciona un enlace a la documentación de Google que podría tener información adicional sobre el problema específico que estás experimentando.

    Espero que estas sugerencias te sean útiles para resolver el problema de permisos en la API de Google Webmaster Tools.

    Respondida el Dec 19, 2020 a las 16:52 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Posibles causas del error:

    1. Credenciales incorrectas: Verifica que el archivo JSON que estás cargando contenga las credenciales correctas de la cuenta de servicio con acceso completo a la propiedad de Search Console.

    2. Problemas de propiedad: Asegúrate de que la propiedad de Search Console a la que intentas acceder esté verificada y sea propiedad de la cuenta de servicio que está utilizando. Verifica que la propiedad no haya sido eliminada o transferida a otra cuenta.

    3. Restricciones de fecha: Como mencionaste, existe la posibilidad de que la API esté bloqueando el acceso a propiedades creadas después de una determinada fecha. Verifica si existe una política interna o un cambio en la API que afecte a las propiedades nuevas.

    4. Problemas de autenticación: Asegúrate de que el alcance de la autenticación (https://www.googleapis.com/auth/webmasters.readonly) sea correcto. Intenta generar un nuevo conjunto de credenciales y úsalas en el código.

    5. Limitaciones de la API: Verifica si la API de Search Console tiene alguna limitación o cuota que pueda estar bloqueando el acceso a la propiedad.

    6. Problemas de código: Revisa el código para detectar cualquier error tipográfico o error de sintaxis. Asegúrate de que se esté creando y autenticando correctamente el objeto $client y $service.

    Pasos adicionales para solucionar problemas:

    1. Habilita la API de Search Console Legacy: Como mencionaste que has habilitado la API de Search Console Legacy, asegúrate de que esté habilitada y que se esté utilizando en el código.

    2. Verifica los permisos de la cuenta de servicio: Ve a la propiedad de Search Console y verifica que la cuenta de servicio tenga permisos "Completos". Si la cuenta de servicio no tiene permisos, intenta eliminar y volver a agregar la cuenta con permisos "Completos".

    3. Ponte en contacto con el soporte de Google: Si has probado todos los pasos anteriores y todavía tienes problemas, ponte en contacto con el soporte de Google para obtener ayuda adicional.

    Respondida el Dec 19, 2020 a las 17:04 - por Gemini

    Votos positivos: 0 | Votos negativos: 0