{"id":2746,"date":"2020-11-03T13:14:49","date_gmt":"2020-11-03T12:14:49","guid":{"rendered":"https:\/\/dinorank.com\/blog\/?p=2746"},"modified":"2025-05-30T13:43:27","modified_gmt":"2025-05-30T11:43:27","slug":"como-saber-si-me-han-hackeado-wordpress","status":"publish","type":"post","link":"https:\/\/dinorank.com\/blog\/recuperar-wordpress-hackeado\/","title":{"rendered":"C\u00f3mo saber si me han hackeado WordPress"},"content":{"rendered":"<p>Si est\u00e1s leyendo este post<strong> puede ser que tu WordPress haya sido hackeado con c\u00f3digo malicioso<\/strong> o, cuanto menos, sospechas que algo as\u00ed ha podido ocurrir. No tienes que culparte ya que es algo m\u00e1s habitual de lo que crees, en especial cuando estamos hablando de WordPress, el CMS m\u00e1s popular hoy d\u00eda entre quienes se deciden a crear un sitio web.<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter wp-image-2785 size-large\" src=\"https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/11\/Como-saber-si-mi-Wordpress-ha-sido-hackeado-y-como-desinfectarlo-1024x559.jpg\" alt=\"recuperar hackeo wordpress\" width=\"770\" height=\"420\" srcset=\"https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/11\/Como-saber-si-mi-Wordpress-ha-sido-hackeado-y-como-desinfectarlo-1024x559.jpg 1024w, https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/11\/Como-saber-si-mi-Wordpress-ha-sido-hackeado-y-como-desinfectarlo-300x164.jpg 300w, https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/11\/Como-saber-si-mi-Wordpress-ha-sido-hackeado-y-como-desinfectarlo-768x419.jpg 768w, https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/11\/Como-saber-si-mi-Wordpress-ha-sido-hackeado-y-como-desinfectarlo.jpg 1100w\" sizes=\"(max-width: 770px) 100vw, 770px\" \/><\/p>\n<p>WordPress no es m\u00e1s inseguro que otros CMS que hay en el mercado; se trata tan solo de que t\u00fa pongas las medidas necesarias para evitar que los hacker puedan colarse en los archivos de tu p\u00e1gina web. Si no te preocupas de su seguridad, es f\u00e1cil que acabes siendo v\u00edctima del malware. Si no sabes por d\u00f3nde empezar, al final de este art\u00edculo te damos algunos consejos \ud83d\ude42<\/p>\n<p>Nunca se habla lo suficiente de <strong>la importancia de tener al d\u00eda la seguridad en WordPress y en el servidor<\/strong>, algo fundamental para ponerlo un poco m\u00e1s dif\u00edcil a los hackers, pero si ya es demasiado tarde para esto tan solo tienes que seguir leyendo.<\/p>\n<p>Aqu\u00ed te vamos a ofrecer una soluci\u00f3n sencilla y que suele funcionar en la mayor\u00eda de los casos pero si el hackeo de tu WordPress es muy grave o no acaba de arreglarse, te recomendamos que contactes con tu <a id=\"CTA-1\" href=\"https:\/\/dinorank.com\/blog\/hosting-seo\/\" target=\"_blank\" rel=\"noopener\">servicio de hosting<\/a> para comunicarles lo que te est\u00e1 ocurriendo y te asesoren.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-2750\" src=\"https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/hackeo-wordpress.jpg\" alt=\"hackeo-wordpress\" width=\"1000\" height=\"336\" srcset=\"https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/hackeo-wordpress.jpg 1000w, https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/hackeo-wordpress-300x101.jpg 300w, https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/hackeo-wordpress-768x258.jpg 768w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><\/p>\n<h2>Tipos de infecci\u00f3n en WordPress<\/h2>\n<p>Las infecciones en WordPress pueden dirigirse hacia dos objetivos:<\/p>\n<ul>\n<li><strong>Archivos<\/strong>. Suelen afectar a plugins o al theme. Dependiendo de la agresividad de la infecci\u00f3n, \u00e9sta puede propagarse por varios archivos o no.<\/li>\n<li><strong>Base de datos<\/strong>. Se produce cuando el malware entra directamente en las bases de datos de WordPress. Si esto ocurre y tienes varios sitios en un mismo servidor, todos est\u00e1n en peligro.<\/li>\n<\/ul>\n<p>Por supuesto, el primer tipo de infecci\u00f3n resulta mucho m\u00e1s sencillo de eliminar ya que est\u00e1 concentrada en un solo elemento y, por lo general, no afecta a otros. Pero cuando la infecci\u00f3n se encuentra en la base de datos no solo es m\u00e1s complicado deshacerse de ella sino que es muy probable que sus efectos sean mucho m\u00e1s perjudiciales.<\/p>\n<h3>\u00bfQu\u00e9 es un hackeo por inyecci\u00f3n de c\u00f3digo en WordPress?<\/h3>\n<p>Una inyecci\u00f3n de c\u00f3digo consiste en <strong>cadenas de c\u00f3digo que se a\u00f1aden a archivos ya existentes de tu WordPress que tienen permisos de ejecuci\u00f3n y de escritura<\/strong>. Esto permite que el atacante pueda leer toda la informaci\u00f3n que contienen esos archivos, modificarlos y ejecutarlos a su antojo.<\/p>\n<p>Por ejemplo, una de las \u00f3rdenes que puede tener el c\u00f3digo inyectado es ocultarse ante los <a id=\"CTA-1\" href=\"https:\/\/dinorank.com\/blog\/crawler-de-google\/\" target=\"_blank\" rel=\"noopener\">robots de Google que realizar el crawleo<\/a> (o rastreo), para que el due\u00f1o de la web no sea alertado de su presencia. Otros hacen que la web redirija a otro dominio distinto desde donde distribuye el malware mediante spam.<\/p>\n<p>Adem\u00e1s de en archivos y bases de datos, el malware puede entrar en tu WordPress a trav\u00e9s de la inyecci\u00f3n de c\u00f3digo malicioso insertado en un JavaScript.\u00a0 Tambi\u00e9n es posible que llegue en inyecciones de SQL que <strong>atacan directamente tu base de datos y cuyo objetivo es el robo de datos e informaci\u00f3n a trav\u00e9s de los formularios y de la petici\u00f3n de nombre de usuario y contrase\u00f1a.<\/strong><\/p>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-2752\" src=\"https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/codigo-malicioso-wordpress.jpg\" alt=\"codigo-malicioso-wordpress\" width=\"1000\" height=\"336\" srcset=\"https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/codigo-malicioso-wordpress.jpg 1000w, https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/codigo-malicioso-wordpress-300x101.jpg 300w, https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/codigo-malicioso-wordpress-768x258.jpg 768w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><\/p>\n<p>Las inyecciones de c\u00f3digo PHP afectan a los archivos con esta extensi\u00f3n y son especialmente peligrosas ya que <strong>el hacker podr\u00e1 saber los cambios que realizas en tu web<\/strong>. Es m\u00e1s, incluso si tu primera acci\u00f3n es cambiar la contrase\u00f1a sabr\u00e1 cu\u00e1l es desde el primer momento.<\/p>\n<p>Las inyecciones en archivos PHP suelen dejar una puerta trasera abierta o &#8220;backdoor&#8221; a trav\u00e9s de la cua<strong>l el hacker tiene acceso a toda tu web sin que t\u00fa mismo seas consciente de ello.<\/strong> Por ello, ser\u00e1 conocedor de todo lo que hagas.<\/p>\n<p>Las inyecciones de c\u00f3digo m\u00e1s populares son las de tipo eval64 y su objetivo principal es el<strong> env\u00edo de spam<\/strong> m\u00e1s que perjudicar en s\u00ed un sitio web o robar informaci\u00f3n. Estas inyecciones provocan problemas con el correo electr\u00f3nico asociado al dominio ya que ser\u00e1 utilizado por el hacker para enviar spam.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2753\" src=\"https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/wordpress-infectado.jpg\" alt=\"wordpress-infectado\" width=\"1000\" height=\"621\" srcset=\"https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/wordpress-infectado.jpg 1000w, https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/wordpress-infectado-300x186.jpg 300w, https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/wordpress-infectado-768x477.jpg 768w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><\/p>\n<h2>C\u00f3mo s\u00e9 que mi WordPress ha sido hackeado<\/h2>\n<p>Las se\u00f1ales suelen ser bastante claras. Una de ellas se produce cuando intentas acceder a la web y es el propio navegador quien te informa mediante <strong>un aviso de que esa p\u00e1gina contiene malware<\/strong> y el acceso a la misma no es seguro.<\/p>\n<p>Es habitual que un WordPress que ha sido hackeado comience a <strong>funcionar de forma m\u00e1s lenta<\/strong> debido a los procesos que est\u00e1 ejecutando el atacante sin que lo sepas. Si ves que tu p\u00e1gina se ralentiza sin motivo aparente trata de escanearla en busca de posible malware.<\/p>\n<p>Otra se\u00f1al se encuentra en los propios<strong> resultados de b\u00fasqueda de Google<\/strong> ya que, en lugar de aparecer el t\u00edtulo y la meta descripci\u00f3n establecidos, ver\u00e1s palabras en otros idiomas e incluso en otros alfabetos.<\/p>\n<p>En resumen, cualquier cosa menos lo que suele ser tu web.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2755\" src=\"https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/malware-wordpress.jpg\" alt=\"malware-wordpress\" width=\"999\" height=\"393\" srcset=\"https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/malware-wordpress.jpg 999w, https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/malware-wordpress-300x118.jpg 300w, https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/malware-wordpress-768x302.jpg 768w\" sizes=\"(max-width: 999px) 100vw, 999px\" \/><\/p>\n<p>Algo muy frecuente es que <strong>el atacante utilice tus cuentas de correo electr\u00f3nico para enviar spam a tus contactos<\/strong>. Estos empezar\u00e1n a advertirte acerca de esos env\u00edos e incluso puede que el servidor decida bloquear tu IP por env\u00edo masivo de spam.<\/p>\n<p>Tambi\u00e9n pueden verse <strong>irregularidades en el tr\u00e1fico de la web<\/strong>. Quiz\u00e1 de repente ya no llega tr\u00e1fico o, por el contrario, ha crecido de una forma desmesurada en poco tiempo. En Google Analitycs puedes ver si el porcentaje de rebote ha crecido o si hay redirecciones extra\u00f1as hacia otras p\u00e1ginas web.<\/p>\n<p>Por \u00faltimo, la p\u00e1gina web puede empezar a mostrar <strong>pop-ups maliciosos<\/strong>. Es la manifestaci\u00f3n m\u00e1s discreta porque, al mostrarse a unos usuarios s\u00ed y a otros no de forma aleatoria, puede pasar un tiempo hasta que t\u00fa mismo llegues a verlos a menos que alg\u00fan conocido te advierta de ello.<\/p>\n<div class=\"su-box su-box-style-default\" id=\"\" style=\"border-color:#00604a;border-radius:3px;max-width:none\"><div class=\"su-box-title\" style=\"background-color:#00937D;color:#FFFFFF;border-top-left-radius:1px;border-top-right-radius:1px\">Mantener 'saludable' tu web tambi\u00e9n es hacer SEO<\/div><div class=\"su-box-content su-u-clearfix su-u-trim\" style=\"border-bottom-left-radius:1px;border-bottom-right-radius:1px\">\n<p>Una vez hayas detectado el problema y solucionado el posible hackeo, te toca optimizar tu negocio al m\u00e1ximo.<\/p>\n<p>Y para ello, debes formarte como es debido. Comienza apunt\u00e1ndote a <strong><a id=\"CTA-2\" href=\"https:\/\/dinosauriomecanizado.com\/curso-seo\/\" target=\"_blank\" rel=\"noopener\">esta newsletter, donde tienes 6 lecciones SEO gratuitas<\/a><\/strong> para que mejores tus conocimientos desde hoy mismo.<\/p>\n<\/div><\/div>\n<p><span data-sheets-root=\"1\"><div id=\"brxe-d62272\" class=\"brxe-block p-2 gap-15\"><div id=\"brxe-1141e3\" class=\"brxe-text-basic h3\">\u00bfOtra newsletter de SEO? Quiz\u00e1s\u2026<\/div><div id=\"brxe-071f14\" class=\"brxe-text-basic\">Esto es lo que podemos ofrecerte:\n<\/div><ul id=\"brxe-eosgrh\" class=\"brxe-list\"><li ><div class=\"content\"><span class=\"icon\"><i class=\"ion-ios-checkmark-circle\"><\/i><\/span><span class=\"title\">Un email semanal con las novedades importantes del sector. <\/span><span class=\"separator\"><\/span><\/div><\/li><li ><div class=\"content\"><span class=\"icon\"><i class=\"ion-ios-checkmark-circle\"><\/i><\/span><span class=\"title\">Aprende SEO que podr\u00e1s aplicar en tu web o en las de tus clientes.<\/span><span class=\"separator\"><\/span><\/div><\/li><li ><div class=\"content\"><span class=\"icon\"><i class=\"ion-ios-checkmark-circle\"><\/i><\/span><span class=\"title\">Accede a webinars y a los eventos SEO totalmente gratuitos que organizamos.<\/span><span class=\"separator\"><\/span><\/div><\/li><\/ul><div id=\"brxe-ajplje\" class=\"brxe-text-basic\"><strong>Sin ruido, sin humo. Gratis.<\/strong> Solo necesito tu email y un poquito de tu atenci\u00f3n, nosotros hacemos el resto.\n\nT\u00fa decides.\n<\/div><div id=\"brxe-c60d60\" data-script-id=\"c60d60\" class=\"brxe-code incontent-form-html\"><style>@import url(https:\/\/fonts.bunny.net\/css?family=ibm-plex-sans:400,700);<\/style>\n<style>\n#_form_301_{font-size:14px;line-height:1.6;font-family:arial, helvetica, sans-serif;margin:0}#_form_301_ *{outline:0}._form_hide{display:none;visibility:hidden}._form_show{display:block;visibility:visible}#_form_301_._form-top{top:0}#_form_301_._form-bottom{bottom:0}#_form_301_._form-left{left:0}#_form_301_._form-right{right:0}#_form_301_ input[type=\"text\"],#_form_301_ input[type=\"tel\"],#_form_301_ input[type=\"date\"],#_form_301_ textarea{padding:6px;height:auto;border:#979797 1px solid;border-radius:4px;color:#000 !important;font-size:14px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#_form_301_ textarea{resize:none}#_form_301_ ._submit{-webkit-appearance:none;cursor:pointer;font-family:arial, sans-serif;font-size:14px;text-align:center;background:#00C4A7 !important;border:0 !important;-moz-border-radius:5px !important;-webkit-border-radius:5px !important;border-radius:5px !important;color:#FFFFFF !important;padding:13px !important}#_form_301_ ._submit:disabled{cursor:not-allowed;opacity:0.4}#_form_301_ ._submit.processing{position:relative}#_form_301_ ._submit.processing::before{content:\"\";width:1em;height:1em;position:absolute;z-index:1;top:50%;left:50%;border:double 3px transparent;border-radius:50%;background-image:linear-gradient(#00C4A7, #00C4A7), conic-gradient(#00C4A7, #FFFFFF);background-origin:border-box;background-clip:content-box, border-box;animation:1200ms ease 0s infinite normal none running _spin}#_form_301_ ._submit.processing::after{content:\"\";position:absolute;top:0;bottom:0;left:0;right:0;background:#00C4A7 !important;border:0 !important;-moz-border-radius:5px !important;-webkit-border-radius:5px !important;border-radius:5px !important;color:#FFFFFF !important;padding:13px !important}@keyframes _spin{0%{transform:translate(-50%, -50%) rotate(90deg)}100%{transform:translate(-50%, -50%) rotate(450deg)}}#_form_301_ ._close-icon{cursor:pointer;background-image:url(\"https:\/\/d226aj4ao1t61q.cloudfront.net\/esfkyjh1u_forms-close-dark.png\");background-repeat:no-repeat;background-size:14.2px 14.2px;position:absolute;display:block;top:11px;right:9px;overflow:hidden;width:16.2px;height:16.2px}#_form_301_ ._close-icon:before{position:relative}#_form_301_ ._form-body{margin-bottom:30px}#_form_301_ ._form-image-left{width:150px;float:left}#_form_301_ ._form-content-right{margin-left:164px}#_form_301_ ._form-branding{color:#fff;font-size:10px;clear:both;text-align:left;margin-top:30px;font-weight:100}#_form_301_ ._form-branding ._logo{display:block;width:130px;height:14px;margin-top:6px;background-image:url(\"https:\/\/d226aj4ao1t61q.cloudfront.net\/hh9ujqgv5_aclogo_li.png\");background-size:130px auto;background-repeat:no-repeat}#_form_301_ .form-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}#_form_301_ ._form-label,#_form_301_ ._form_element ._form-label{font-weight:bold;margin-bottom:5px;display:block}#_form_301_._dark ._form-branding{color:#333}#_form_301_._dark ._form-branding ._logo{background-image:url(\"https:\/\/d226aj4ao1t61q.cloudfront.net\/jftq2c8s_aclogo_dk.png\")}#_form_301_ ._form_element{position:relative;margin-bottom:10px;font-size:0;max-width:100%}#_form_301_ ._form_element *{font-size:14px}#_form_301_ ._form_element._clear{clear:both;width:100%;float:none}#_form_301_ ._form_element._clear:after{clear:left}#_form_301_ ._form_element input[type=\"text\"],#_form_301_ ._form_element input[type=\"date\"],#_form_301_ ._form_element select,#_form_301_ ._form_element textarea:not(.g-recaptcha-response){display:block;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-family:inherit}#_form_301_ ._field-wrapper{position:relative}#_form_301_ ._inline-style{float:left}#_form_301_ ._inline-style input[type=\"text\"]{width:150px}#_form_301_ ._inline-style:not(._clear){margin-right:20px}#_form_301_ ._form_element img._form-image{max-width:100%}#_form_301_ ._form_element ._form-fieldset{border:0;padding:0.01em 0 0 0;margin:0;min-width:0}#_form_301_ ._clear-element{clear:left}#_form_301_ ._full_width{width:100%}#_form_301_ ._form_full_field{display:block;width:100%;margin-bottom:10px}#_form_301_ input[type=\"text\"]._has_error,#_form_301_ textarea._has_error{border:#F37C7B 1px solid}#_form_301_ input[type=\"checkbox\"]._has_error{outline:#F37C7B 1px solid}#_form_301_ ._show_be_error{float:left}#_form_301_ ._error{display:block;position:absolute;font-size:14px;z-index:10000001}#_form_301_ ._error._above{padding-bottom:4px;bottom:39px;right:0}#_form_301_ ._error._below{padding-top:8px;top:100%;right:0}#_form_301_ ._error._above ._error-arrow{bottom:-4px;right:15px;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #FFDDDD}#_form_301_ ._error._below ._error-arrow{top:0;right:15px;border-left:8px solid transparent;border-right:8px solid transparent;border-bottom:8px solid #FFDDDD}#_form_301_ ._error-inner{padding:12px 12px 12px 36px;background-color:#FFDDDD;background-image:url(\"data:image\/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http:\/\/www.w3.org\/2000\/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8ZM9 3V9H7V3H9ZM9 13V11H7V13H9Z' fill='%23CA0000'\/%3E%3C\/svg%3E\");background-repeat:no-repeat;background-position:12px center;font-size:14px;font-family:arial, sans-serif;font-weight:600;line-height:16px;color:#000;text-align:center;text-decoration:none;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;box-shadow:0 1px 4px rgba(31, 33, 41, 0.298295)}@media only screen and (max-width:319px){#_form_301_ ._error-inner{padding:7px 7px 7px 25px;font-size:12px;line-height:12px;background-position:4px center;max-width:100px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}}#_form_301_ ._error-inner._form_error{margin-bottom:5px;text-align:left}#_form_301_ ._button-wrapper ._error-inner._form_error{position:static}#_form_301_ ._error-inner._no_arrow{margin-bottom:10px}#_form_301_ ._error-arrow{position:absolute;width:0;height:0}#_form_301_ ._error-html{margin-bottom:10px}.pika-single{z-index:10000001 !important}#_form_301_ input[type=\"text\"].datetime_date{width:69%;display:inline}#_form_301_ select.datetime_time{width:29%;display:inline;height:32px}#_form_301_ input[type=\"date\"].datetime_date{width:69%;display:inline-flex}#_form_301_ input[type=\"time\"].datetime_time{width:29%;display:inline-flex}@media (min-width:320px) and (max-width:667px){::-webkit-scrollbar{display:none}#_form_301_{margin:0;width:100%;min-width:100%;max-width:100%;box-sizing:border-box}#_form_301_ *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:1em}#_form_301_ ._form-content{margin:0;width:100%}#_form_301_ ._form-inner{display:block;min-width:100%}#_form_301_ ._form-title,#_form_301_ ._inline-style{margin-top:0;margin-right:0;margin-left:0}#_form_301_ ._form-title{font-size:1.2em}#_form_301_ ._form_element{margin:0 0 20px;padding:0;width:100%}#_form_301_ ._form-element,#_form_301_ ._inline-style,#_form_301_ input[type=\"text\"],#_form_301_ label,#_form_301_ p,#_form_301_ textarea:not(.g-recaptcha-response){float:none;display:block;width:100%}#_form_301_ ._row._checkbox-radio label{display:inline}#_form_301_ ._row,#_form_301_ p,#_form_301_ label{margin-bottom:0.7em;width:100%}#_form_301_ ._row input[type=\"checkbox\"],#_form_301_ ._row input[type=\"radio\"]{margin:0 !important;vertical-align:middle !important}#_form_301_ ._row input[type=\"checkbox\"]+span label{display:inline}#_form_301_ ._row span label{margin:0 !important;width:initial !important;vertical-align:middle !important}#_form_301_ ._form-image{max-width:100%;height:auto !important}#_form_301_ input[type=\"text\"]{padding-left:10px;padding-right:10px;font-size:16px;line-height:1.3em;-webkit-appearance:none}#_form_301_ input[type=\"radio\"],#_form_301_ input[type=\"checkbox\"]{display:inline-block;width:1.3em;height:1.3em;font-size:1em;margin:0 0.3em 0 0;vertical-align:baseline}#_form_301_ button[type=\"submit\"]{padding:20px;font-size:1.5em}#_form_301_ ._inline-style{margin:20px 0 0 !important}#_form_301_ ._inline-style input[type=\"text\"]{width:100%}}#_form_301_ .sms_consent_checkbox{position:relative;width:100%;display:flex;align-items:flex-start;padding:20px 0}#_form_301_ .sms_consent_checkbox input[type=\"checkbox\"]{float:left;margin:5px 10px 10px 0}#_form_301_ .sms_consent_checkbox .sms_consent_message{display:inline;float:left;text-align:left;margin-bottom:10px;font-size:14px;color:#7D8799}#_form_301_ .sms_consent_checkbox .sms_consent_message.sms_consent_mini{width:90%}#_form_301_ .sms_consent_checkbox ._error._above{right:auto;bottom:0}#_form_301_ .sms_consent_checkbox ._error._above ._error-arrow{right:auto;left:5px}@media (min-width:320px) and (max-width:667px){#_form_301_ .sms_consent_checkbox ._error._above{top:-30px;left:0;bottom:auto}}#_form_301_ .field-required{color:#FF0000}#_form_301_{position:relative;text-align:left;margin:25px auto 0;padding:20px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:rgba(255, 255, 255, 0) !important;border-top:0px solid #737373 !important;border-right:0px solid #737373 !important;border-bottom:0px solid #737373 !important;border-left:0px solid #737373 !important;max-width:800px;-moz-border-radius:1px !important;-webkit-border-radius:1px !important;border-radius:1px !important;color:#000000}#_form_301_ ._show_be_error{min-width:100%}#_form_301_._inline-form,#_form_301_._inline-form ._form-content{font-family:IBM Plex Sans;font-size:14px;font-weight:400}#_form_301_._inline-form ._row span,#_form_301_._inline-form ._row label{font-family:IBM Plex Sans;font-size:14px;font-weight:400;line-height:1.6em;color:#888 !important}#_form_301__inlineform input[type=\"text\"],#_form_301__inlineform input[type=\"date\"],#_form_301__inlineform input[type=\"tel\"],#_form_301__inlineform select,#_form_301__inlineform textarea:not(.g-recaptcha-response){font-family:IBM Plex Sans;font-size:14px;font-weight:400;font-color:#000000;line-height:1.6em}#_form_301_._inline-form ._html-code *:not(h1, h2, h3, h4, h5, h6),#_form_301_._inline-form .sms_consent_message,#_form_301_._inline-form ._form-thank-you{font-family:IBM Plex Sans;font-size:14px;font-weight:400;color:#888 !important}#_form_301_._inline-form ._form-label,#_form_301_._inline-form ._form-emailidentifier,#_form_301_._inline-form ._form-checkbox-option-label{font-family:IBM Plex Sans;font-size:14px;font-weight:700;line-height:1.6em;color:#888 !important}#_form_301_._inline-form ._submit{margin-top:12px;font-family:IBM Plex Sans;font-size:14px;font-weight:400}#_form_301_._inline-form ._html-code h1,#_form_301_._inline-form ._html-code h2,#_form_301_._inline-form ._html-code h3,#_form_301_._inline-form ._html-code h4,#_form_301_._inline-form ._html-code h5,#_form_301_._inline-form ._html-code h6,#_form_301_._inline-form ._form-title{font-family:IBM Plex Sans;font-size:22px;line-height:normal;font-weight:700;color:black;margin-bottom:0;display:block}#_form_301_._inline-form ._form-branding{font-family:\"IBM Plex Sans\", Helvetica, sans-serif;font-size:13px;font-weight:100;font-style:normal;text-decoration:none}#_form_301_:before,#_form_301_:after{content:\" \";display:table}#_form_301_:after{clear:both}#_form_301_._inline-style{width:auto;display:inline-block}#_form_301_._inline-style input[type=\"text\"],#_form_301_._inline-style input[type=\"date\"]{padding:10px 12px}#_form_301_._inline-style button._inline-style{position:relative;top:27px}#_form_301_._inline-style p{margin:0}#_form_301_._inline-style ._button-wrapper{position:relative;margin:16px 12.5px 0 20px}#_form_301_ ._form-thank-you{position:relative;left:0;right:0;text-align:center;font-size:18px}#_form_301_ ._form-pc-confirmation ._submit{margin-top:16px}@media (min-width:320px) and (max-width:667px){#_form_301_._inline-form._inline-style ._inline-style._button-wrapper{margin-top:20px !important;margin-left:0 !important}}#_form_301_ .iti{width:100%}#_form_301_ .iti.iti--allow-dropdown.iti--separate-dial-code{width:100%}#_form_301_ .iti input{width:100%;border:#979797 1px solid;border-radius:4px}#_form_301_ .iti--separate-dial-code .iti__selected-flag{background-color:#FFFFFF;border-radius:4px}#_form_301_ .iti--separate-dial-code .iti__selected-flag:hover{background-color:rgba(0, 0, 0, 0.05)}#_form_301_ .iti__country-list{border-radius:4px;margin-top:4px;min-width:460px}#_form_301_ .iti__country-list--dropup{margin-bottom:4px}#_form_301_ .phone-error-hidden{display:none}#_form_301_ .phone-error{color:#E40E49}#_form_301_ .phone-input-error{border:1px solid #E40E49 !important}#_form_301_._inline-form ._form-content ._form-list-subscriptions-field fieldset{margin:0;margin-bottom:1.1428571429em;border:none;padding:0}#_form_301_._inline-form ._form-content ._form-list-subscriptions-field fieldset:last-child{margin-bottom:0}#_form_301_._inline-form ._form-content ._form-list-subscriptions-field legend{margin-bottom:1.1428571429em}#_form_301_._inline-form ._form-content ._form-list-subscriptions-field label{display:flex;align-items:flex-start;justify-content:flex-start;margin-bottom:0.8571428571em}#_form_301_._inline-form ._form-content ._form-list-subscriptions-field label:last-child{margin-bottom:0}#_form_301_._inline-form ._form-content ._form-list-subscriptions-field input{margin:0;margin-right:8px}#_form_301_._inline-form ._form-content ._form-list-subscriptions-field ._form-checkbox-option-label{display:block;font-weight:400;margin-top:-4px}#_form_301_._inline-form ._form-content ._form-list-subscriptions-field ._form-checkbox-option-label-with-description{display:block;font-weight:700;margin-top:-4px}#_form_301_._inline-form ._form-content ._form-list-subscriptions-field ._form-checkbox-option-description{margin:0;font-size:0.8571428571em}#_form_301_._inline-form ._form-content ._form-list-subscriptions-field ._form-subscriptions-unsubscribe-all-description{line-height:normal;margin-top:-2px}\n#_form_301_ ._submit{width:100%;font-family:\"Source Sans Pro\", Sans-serif !important;font-size:18px !important;font-weight:500 !important}#_form_301_ ._submit:hover{background-color:#04937E !important}#_form_301_ input#email{padding:3px 12px;background-color:#ffffff}#_form_301_ ._row{margin-top:-5px}#_form_301_._form{margin-top:-5px}#_form_301_ ._error._below{position:relative !important}#_form_301_ ._error._above{position:absolute !important}@media (min-width:320px) and (max-width:667px){#_form_301_ ._form_element{margin:0 0 0px}}<\/style>\n<form method=\"POST\" action=\"https:\/\/deandelafuenteromero.activehosted.com\/proc.php\" id=\"_form_301_\" class=\"_form _form_301 _inline-form  _dark\" novalidate data-styles-version=\"5\">\n  <input type=\"hidden\" name=\"u\" value=\"301\" \/>\n  <input type=\"hidden\" name=\"f\" value=\"301\" \/>\n  <input type=\"hidden\" name=\"s\" \/>\n  <input type=\"hidden\" name=\"c\" value=\"0\" \/>\n  <input type=\"hidden\" name=\"m\" value=\"0\" \/>\n  <input type=\"hidden\" name=\"act\" value=\"sub\" \/>\n  <input type=\"hidden\" name=\"v\" value=\"2\" \/>\n  <input type=\"hidden\" name=\"or\" value=\"9828494011f2fd6968fee0a8a9419a1e\" \/>\n  <div class=\"_form-content\">\n    <div class=\"_form_element _x74577619 _full_width \" >\n      <label for=\"email\" class=\"_form-label\">\n      <\/label>\n      <div class=\"_field-wrapper\">\n        <input type=\"text\" id=\"email\" name=\"email\" placeholder=\"Tu email...\" required\/>\n      <\/div>\n    <\/div>\n    <div class=\"_form_element _x87696446 _full_width \" >\n      <fieldset class=\"_form-fieldset\">\n        <div class=\"_row\">\n          <legend for=\"field[15][]\" class=\"_form-label\">\n          <\/legend>\n        <\/div>\n        <input data-autofill=\"false\" type=\"hidden\" id=\"field[15][]\" name=\"field[15][]\" value=\"~|\">\n        <div class=\"_row _checkbox-radio\">\n          <input id=\"field_15He le\u00eddo y acepto la pol\u00edtica de privacidad\" type=\"checkbox\" name=\"field[15][]\"\n          value=\"He le\u00eddo y acepto la pol\u00edtica de privacidad\"                                                                                 required                                >\n          <span>\n            <label for=\"field_15He le\u00eddo y acepto la pol\u00edtica de privacidad\">\n              He le\u00eddo y acepto la pol\u00edtica de privacidad<span class=\"field-required\">\n              *\n            <\/span>\n          <\/label>\n        <\/span>\n      <\/div>\n    <\/fieldset>\n  <\/div>\n  <div class=\"_form_element _x09639014 _full_width \" >\n    <input type=\"hidden\" name=\"field[121]\" value=\"\" \/>\n  <\/div>\n  <div class=\"_form_element _x64811239 _full_width \" >\n    <input type=\"hidden\" name=\"field[122]\" value=\"\" \/>\n  <\/div>\n  <div class=\"_form_element _x58860354 _full_width \" >\n    <input type=\"hidden\" name=\"field[123]\" value=\"\" \/>\n  <\/div>\n  <div class=\"_form_element _x23331849 _full_width \" >\n    <input type=\"hidden\" name=\"field[125]\" value=\"\" \/>\n  <\/div>\n  <div class=\"_form_element _x72046679 _full_width \" >\n    <input type=\"hidden\" name=\"field[126]\" value=\"\" \/>\n  <\/div>\n  <div class=\"_form_element _x41336277 _full_width \" >\n    <input type=\"hidden\" name=\"field[127]\" value=\"\" \/>\n  <\/div>\n  <div class=\"_button-wrapper _full_width\">\n    <button id=\"_form_301_submit\" class=\"_submit\" type=\"submit\">\n      \u00a1Me apunto!\n    <\/button>\n  <\/div>\n  <div class=\"_clear-element\">\n  <\/div>\n<\/div>\n<div class=\"_form-thank-you\" style=\"display:none;\">\n<\/div>\n<\/form><script>\nwindow.cfields = {\"15\":\"poltica_privacidad\",\"121\":\"utm_campaign\",\"122\":\"utm_source\",\"123\":\"utm_medium\",\"125\":\"utm_content\",\"126\":\"utm_adset\",\"127\":\"utm_ad\"};\nwindow._show_thank_you = function(id, message, trackcmp_url, email) {\n    var form = document.getElementById('_form_' + id + '_'), thank_you = form.querySelector('._form-thank-you');\n    form.querySelector('._form-content').style.display = 'none';\n    thank_you.innerHTML = message;\n    thank_you.style.display = 'block';\n    const vgoAlias = typeof visitorGlobalObjectAlias === 'undefined' ? 'vgo' : visitorGlobalObjectAlias;\n    var visitorObject = window[vgoAlias];\n    if (email && typeof visitorObject !== 'undefined') {\n        visitorObject('setEmail', email);\n        visitorObject('update');\n    } else if (typeof(trackcmp_url) != 'undefined' && trackcmp_url) {\n        \/\/ Site tracking URL to use after inline form submission.\n        _load_script(trackcmp_url);\n    }\n    if (typeof window._form_callback !== 'undefined') window._form_callback(id);\n};\nwindow._show_unsubscribe = function(id, message, trackcmp_url, email) {\n    var form = document.getElementById('_form_' + id + '_'), unsub = form.querySelector('._form-thank-you');\n    var branding = form.querySelector('._form-branding');\n    if (branding) {\n        branding.style.display = 'none';\n    }\n    form.querySelector('._form-content').style.display = 'none';\n    unsub.style.display = 'block';\n    form.insertAdjacentHTML('afterend', message)\n    const vgoAlias = typeof visitorGlobalObjectAlias === 'undefined' ? 'vgo' : visitorGlobalObjectAlias;\n    var visitorObject = window[vgoAlias];\n    if (email && typeof visitorObject !== 'undefined') {\n        visitorObject('setEmail', email);\n        visitorObject('update');\n    } else if (typeof(trackcmp_url) != 'undefined' && trackcmp_url) {\n        \/\/ Site tracking URL to use after inline form submission.\n        _load_script(trackcmp_url);\n    }\n    if (typeof window._form_callback !== 'undefined') window._form_callback(id);\n};\nwindow._show_error = function(id, message, html) {\n    var form = document.getElementById('_form_' + id + '_'),\n        err = document.createElement('div'),\n        button = form.querySelector('button[type=\"submit\"]'),\n        old_error = form.querySelector('._form_error');\n    if (old_error) old_error.parentNode.removeChild(old_error);\n    err.innerHTML = message;\n    err.className = '_error-inner _form_error _no_arrow';\n    var wrapper = document.createElement('div');\n    wrapper.className = '_form-inner _show_be_error';\n    wrapper.appendChild(err);\n    button.parentNode.insertBefore(wrapper, button);\n    var submitButton = form.querySelector('[id^=\"_form\"][id$=\"_submit\"]');\n    submitButton.disabled = false;\n    submitButton.classList.remove('processing');\n    if (html) {\n        var div = document.createElement('div');\n        div.className = '_error-html';\n        div.innerHTML = html;\n        err.appendChild(div);\n    }\n};\nwindow._show_pc_confirmation = function(id, header, detail, show, email) {\n    var form = document.getElementById('_form_' + id + '_'), pc_confirmation = form.querySelector('._form-pc-confirmation');\n    if (pc_confirmation.style.display === 'none') {\n        form.querySelector('._form-content').style.display = 'none';\n        pc_confirmation.innerHTML = \"<div class='_form-title'>\" + header + \"<\/div>\" + \"<p>\" + detail + \"<\/p>\" +\n        \"<button class='_submit' id='hideButton'>Administrar preferencias<\/button>\";\n        pc_confirmation.style.display = 'block';\n        var mp = document.querySelector('input[name=\"mp\"]');\n        mp.value = '0';\n    } else {\n        form.querySelector('._form-content').style.display = 'inline';\n        pc_confirmation.style.display = 'none';\n    }\n\n    var hideButton = document.getElementById('hideButton');\n    \/\/ Add event listener to the button\n    hideButton.addEventListener('click', function() {\n        var submitButton = document.querySelector('#_form_301_submit');\n        submitButton.disabled = false;\n        submitButton.classList.remove('processing');\n        var mp = document.querySelector('input[name=\"mp\"]');\n        mp.value = '1';\n        const cacheBuster = new URL(window.location.href);\n        cacheBuster.searchParams.set('v', new Date().getTime());\n        window.location.href = cacheBuster.toString();\n    });\n\n    const vgoAlias = typeof visitorGlobalObjectAlias === 'undefined' ? 'vgo' : visitorGlobalObjectAlias;\n    var visitorObject = window[vgoAlias];\n    if (email && typeof visitorObject !== 'undefined') {\n        visitorObject('setEmail', email);\n        visitorObject('update');\n    } else if (typeof(trackcmp_url) != 'undefined' && trackcmp_url) {\n        \/\/ Site tracking URL to use after inline form submission.\n        _load_script(trackcmp_url);\n    }\n    if (typeof window._form_callback !== 'undefined') window._form_callback(id);\n};\nwindow._load_script = function(url, callback, isSubmit) {\n    var head = document.querySelector('head'), script = document.createElement('script'), r = false;\n    var submitButton = document.querySelector('#_form_301_submit');\n    script.charset = 'utf-8';\n    script.src = url;\n    if (callback) {\n        script.onload = script.onreadystatechange = function() {\n            if (!r && (!this.readyState || this.readyState == 'complete')) {\n                r = true;\n                callback();\n            }\n        };\n    }\n    script.onerror = function() {\n        if (isSubmit) {\n            if (script.src.length > 10000) {\n                _show_error(\"301\", \"Lo sentimos, ocurri\u00f3 un error con el env\u00edo. Acorta tus respuestas y vuelve a intentarlo.\");\n            } else {\n                _show_error(\"301\", \"Lo sentimos, ocurri\u00f3 un error con el env\u00edo. Vuelve a intentarlo.\");\n            }\n            submitButton.disabled = false;\n            submitButton.classList.remove('processing');\n        }\n    }\n\n    head.appendChild(script);\n};\n(function() {\n    var iti;\n    if (window.location.search.search(\"excludeform\") !== -1) return false;\n    var getCookie = function(name) {\n        var match = document.cookie.match(new RegExp('(^|; )' + name + '=([^;]+)'));\n        return match ? match[2] : null;\n    }\n    var setCookie = function(name, value) {\n        var now = new Date();\n        var time = now.getTime();\n        var expireTime = time + 1000 * 60 * 60 * 24 * 365;\n        now.setTime(expireTime);\n        document.cookie = name + '=' + value + '; expires=' + now + ';path=\/; Secure; SameSite=Lax;';\n    }\n    var addEvent = function(element, event, func) {\n        if (element.addEventListener) {\n            element.addEventListener(event, func);\n        } else {\n            var oldFunc = element['on' + event];\n            element['on' + event] = function() {\n                oldFunc.apply(this, arguments);\n                func.apply(this, arguments);\n            };\n        }\n    }\n    var _removed = false;\n        var form_to_submit = document.getElementById('_form_301_');\n    var allInputs = form_to_submit.querySelectorAll('input, select, textarea'), tooltips = [], submitted = false;\n\n    var getUrlParam = function(name) {\n        if (name.toLowerCase() !== 'email') {\n            var params = new URLSearchParams(window.location.search);\n            return params.get(name) || false;\n        }\n        \/\/ email is a special case because a plus is valid in the email address\n        var qString = window.location.search;\n        if (!qString) {\n            return false;\n        }\n        var parameters = qString.substr(1).split('&');\n        for (var i = 0; i < parameters.length; i++) {\n            var parameter = parameters[i].split('=');\n            if (parameter[0].toLowerCase() === 'email') {\n                return parameter[1] === undefined ? true : decodeURIComponent(parameter[1]);\n            }\n        }\n        return false;\n    };\n\n    var acctDateFormat = \"%d\/%m\/%Y\";\n    var getNormalizedDate = function(date, acctFormat) {\n        var decodedDate = decodeURIComponent(date);\n        if (acctFormat && acctFormat.match(\/(%d|%e).*%m\/gi) !== null) {\n            return decodedDate.replace(\/(\\d{2}).*(\\d{2}).*(\\d{4})\/g, '$3-$2-$1');\n        } else if (Date.parse(decodedDate)) {\n            var dateObj = new Date(decodedDate);\n            var year = dateObj.getFullYear();\n            var month = dateObj.getMonth() + 1;\n            var day = dateObj.getDate();\n            return `${year}-${month < 10 ? `0${month}` : month}-${day < 10 ? `0${day}` : day}`;\n        }\n        return false;\n    };\n\n    var getNormalizedTime = function(time) {\n        var hour, minutes;\n        var decodedTime = decodeURIComponent(time);\n        var timeParts = Array.from(decodedTime.matchAll(\/(\\d{1,2}):(\\d{1,2})\\W*([AaPp][Mm])?\/gm))[0];\n        if (timeParts[3]) { \/\/ 12 hour format\n            var isPM = timeParts[3].toLowerCase() === 'pm';\n            if (isPM) {\n                hour = parseInt(timeParts[1]) === 12 ? '12' : `${parseInt(timeParts[1]) + 12}`;\n            } else {\n                hour = parseInt(timeParts[1]) === 12 ? '0' : timeParts[1];\n            }\n        } else { \/\/ 24 hour format\n            hour = timeParts[1];\n        }\n        var normalizedHour = parseInt(hour) < 10 ? `0${parseInt(hour)}` : hour;\n        var minutes = timeParts[2];\n        return `${normalizedHour}:${minutes}`;\n    };\n\n    for (var i = 0; i < allInputs.length; i++) {\n        var regexStr = \"field\\\\[(\\\\d+)\\\\]\";\n        var results = new RegExp(regexStr).exec(allInputs[i].name);\n        if (results != undefined) {\n            allInputs[i].dataset.name = allInputs[i].name.match(\/\\[time\\]$\/)\n                ? `${window.cfields[results[1]]}_time`\n                : window.cfields[results[1]];\n        } else {\n            allInputs[i].dataset.name = allInputs[i].name;\n        }\n        var fieldVal = getUrlParam(allInputs[i].dataset.name);\n\n        if (fieldVal) {\n            if (allInputs[i].dataset.autofill === \"false\") {\n                continue;\n            }\n            if (allInputs[i].type == \"radio\" || allInputs[i].type == \"checkbox\") {\n                if (allInputs[i].value == fieldVal) {\n                    allInputs[i].checked = true;\n                }\n            } else if (allInputs[i].type == \"date\") {\n                allInputs[i].value = getNormalizedDate(fieldVal, acctDateFormat);\n            } else if (allInputs[i].type == \"time\") {\n                allInputs[i].value = getNormalizedTime(fieldVal);\n            } else {\n                allInputs[i].value = fieldVal;\n            }\n        }\n    }\n\n    var remove_tooltips = function() {\n        for (var i = 0; i < tooltips.length; i++) {\n            tooltips[i].tip.parentNode.removeChild(tooltips[i].tip);\n        }\n        tooltips = [];\n    };\n    var remove_tooltip = function(elem) {\n        for (var i = 0; i < tooltips.length; i++) {\n            if (tooltips[i].elem === elem) {\n                tooltips[i].tip.parentNode.removeChild(tooltips[i].tip);\n                tooltips.splice(i, 1);\n                return;\n            }\n        }\n    };\n    var create_tooltip = function(elem, text) {\n        var tooltip = document.createElement('div'),\n            arrow = document.createElement('div'),\n            inner = document.createElement('div'), new_tooltip = {};\n        if (elem.type != 'radio' && (elem.type != 'checkbox' || elem.name === 'sms_consent')) {\n            tooltip.className = '_error';\n            arrow.className = '_error-arrow';\n            inner.className = '_error-inner';\n            inner.innerHTML = text;\n            tooltip.appendChild(arrow);\n            tooltip.appendChild(inner);\n            elem.parentNode.appendChild(tooltip);\n        } else {\n            tooltip.className = '_error-inner _no_arrow';\n            tooltip.innerHTML = text;\n            elem.parentNode.insertBefore(tooltip, elem);\n            new_tooltip.no_arrow = true;\n        }\n        new_tooltip.tip = tooltip;\n        new_tooltip.elem = elem;\n        tooltips.push(new_tooltip);\n        return new_tooltip;\n    };\n    var resize_tooltip = function(tooltip) {\n        var rect = tooltip.elem.getBoundingClientRect();\n        var doc = document.documentElement,\n            scrollPosition = rect.top - ((window.pageYOffset || doc.scrollTop)  - (doc.clientTop || 0));\n        if (scrollPosition < 40) {\n            tooltip.tip.className = tooltip.tip.className.replace(\/ ?(_above|_below) ?\/g, '') + ' _below';\n        } else {\n            tooltip.tip.className = tooltip.tip.className.replace(\/ ?(_above|_below) ?\/g, '') + ' _above';\n        }\n    };\n    var resize_tooltips = function() {\n        if (_removed) return;\n        for (var i = 0; i < tooltips.length; i++) {\n            if (!tooltips[i].no_arrow) resize_tooltip(tooltips[i]);\n        }\n    };\n    var validate_field = function(elem, remove) {\n        var tooltip = null, value = elem.value, no_error = true;\n        remove ? remove_tooltip(elem) : false;\n        if (elem.type != 'checkbox') elem.className = elem.className.replace(\/ ?_has_error ?\/g, '');\n        if (elem.getAttribute('required') !== null) {\n            if (elem.type == 'radio' || (elem.type == 'checkbox' && \/any\/.test(elem.className))) {\n                var elems = form_to_submit.elements[elem.name];\n                if (!(elems instanceof NodeList || elems instanceof HTMLCollection) || elems.length <= 1) {\n                    no_error = elem.checked;\n                }\n                else {\n                    no_error = false;\n                    for (var i = 0; i < elems.length; i++) {\n                        if (elems[i].checked) no_error = true;\n                    }\n                }\n                if (!no_error) {\n                    tooltip = create_tooltip(elem, \"Seleccione una opci\u00f3n.\");\n                }\n            } else if (elem.type =='checkbox') {\n                var elems = form_to_submit.elements[elem.name], found = false, err = [];\n                no_error = true;\n                for (var i = 0; i < elems.length; i++) {\n                    if (elems[i].getAttribute('required') === null) continue;\n                    if (!found && elems[i] !== elem) return true;\n                    found = true;\n                    elems[i].className = elems[i].className.replace(\/ ?_has_error ?\/g, '');\n                    if (!elems[i].checked) {\n                        no_error = false;\n                        elems[i].className = elems[i].className + ' _has_error';\n                        err.push(\"Es necesario verificar %s\".replace(\"%s\", elems[i].value));\n                    }\n                }\n                if (!no_error) {\n                    tooltip = create_tooltip(elem, err.join('<br\/>'));\n                }\n            } else if (elem.tagName == 'SELECT') {\n                var selected = true;\n                if (elem.multiple) {\n                    selected = false;\n                    for (var i = 0; i < elem.options.length; i++) {\n                        if (elem.options[i].selected) {\n                            selected = true;\n                            break;\n                        }\n                    }\n                } else {\n                    for (var i = 0; i < elem.options.length; i++) {\n                        if (elem.options[i].selected\n                            && (!elem.options[i].value\n                            || (elem.options[i].value.match(\/\\n\/g)))\n                        ) {\n                            selected = false;\n                        }\n                    }\n                }\n                if (!selected) {\n                    elem.className = elem.className + ' _has_error';\n                    no_error = false;\n                    tooltip = create_tooltip(elem, \"Seleccione una opci\u00f3n.\");\n                }\n            } else if (value === undefined || value === null || value === '') {\n                elem.className = elem.className + ' _has_error';\n                no_error = false;\n                tooltip = create_tooltip(elem, \"Este campo es obligatorio.\");\n            }\n        }\n        if (no_error && elem.name == 'email') {\n            if (!value.match(\/^[\\+_a-z0-9-'&=]+(\\.[\\+_a-z0-9-']+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,})$\/i)) {\n                elem.className = elem.className + ' _has_error';\n                no_error = false;\n                tooltip = create_tooltip(elem, \"Introduzca una direcci\u00f3n de correo electr\u00f3nico v\u00e1lida.\");\n            }\n        }\n        if (no_error && (elem.id == 'phone')) {\n            if (elem.value.trim() && typeof iti != 'undefined' && !iti.isValidNumber()) {\n                elem.className = elem.className + ' _has_error';\n                no_error = false;\n                tooltip = create_tooltip(elem, \"Ingresa un n\u00famero de tel\u00e9fono v\u00e1lido.\");\n            }\n        }\n        if (no_error && \/date_field\/.test(elem.className)) {\n            if (!value.match(\/^\\d\\d\\d\\d-\\d\\d-\\d\\d$\/)) {\n                elem.className = elem.className + ' _has_error';\n                no_error = false;\n                tooltip = create_tooltip(elem, \"Introduzca una fecha v\u00e1lida.\");\n            }\n        }\n\n        if (no_error && elem.name === 'sms_consent') {\n            const elemShouldBeChecked = (!!elem.attributes.required && !elem.checked);\n            if (elemShouldBeChecked) {\n                elem.className = elem.className + ' _has_error';\n                no_error = false;\n                tooltip = create_tooltip(elem, \"Marca esta casilla para continuar\");\n            } else {\n                elem.className = elem.className.replace(\/ ?_has_error ?\/g, '');\n            }\n        }\n        tooltip ? resize_tooltip(tooltip) : false;\n        return no_error;\n    };\n    var needs_validate = function(el) {\n        if(el.getAttribute('required') !== null){\n            return true;\n        }\n        if((el.name === 'email' || el.id === 'phone') && el.value !== \"\"){\n            return true;\n        }\n\n        return false;\n    };\n    var validate_form = function(e) {\n        var err = form_to_submit.querySelector('._form_error'), no_error = true;\n        if (!submitted) {\n            submitted = true;\n            for (var i = 0, len = allInputs.length; i < len; i++) {\n                var input = allInputs[i];\n                if (needs_validate(input)) {\n                    if (input.type == 'text' || input.type == 'number' || input.type == 'time' || input.type == 'tel') {\n                        addEvent(input, 'blur', function() {\n                            this.value = this.value.trim();\n                            validate_field(this, true);\n                        });\n                        addEvent(input, 'input', function() {\n                            validate_field(this, true);\n                        });\n                    } else if (input.type == 'radio' || input.type == 'checkbox') {\n                        (function(el) {\n                            function getElementsArray(name){\n                                const value =  form_to_submit.elements[name];\n                                if (Array.isArray(value)){\n                                    return value;\n                                }\n                                return [value];\n                            }\n                            var radios = getElementsArray(el.name);\n                            for (var i = 0; i < radios.length; i++) {\n                                addEvent(radios[i], 'change', function() {\n                                    validate_field(el, true);\n                                });\n                            }\n                        })(input);\n                    } else if (input.tagName == 'SELECT') {\n                        addEvent(input, 'change', function() {\n                            validate_field(this, true);\n                        });\n                    } else if (input.type == 'textarea'){\n                        addEvent(input, 'input', function() {\n                            validate_field(this, true);\n                        });\n                    }\n                }\n            }\n        }\n        remove_tooltips();\n        for (var i = 0, len = allInputs.length; i < len; i++) {\n            var elem = allInputs[i];\n            if (needs_validate(elem)) {\n                if (elem.tagName.toLowerCase() !== \"select\") {\n                    elem.value = elem.value.trim();\n                }\n                validate_field(elem) ? true : no_error = false;\n            }\n        }\n        if (!no_error && e) {\n            e.preventDefault();\n        }\n        resize_tooltips();\n        return no_error;\n    };\n    addEvent(window, 'resize', resize_tooltips);\n    addEvent(window, 'scroll', resize_tooltips);\n\n    var _form_serialize = function(form){if(!form||form.nodeName!==\"FORM\"){return }var i,j,q=[];for(i=0;i<form.elements.length;i++){if(form.elements[i].name===\"\"){continue}switch(form.elements[i].nodeName){case\"INPUT\":switch(form.elements[i].type){case\"tel\":q.push(form.elements[i].name+\"=\"+encodeURIComponent(form.elements[i].previousSibling.querySelector('div.iti__selected-dial-code').innerText)+encodeURIComponent(\" \")+encodeURIComponent(form.elements[i].value));break;case\"text\":case\"number\":case\"date\":case\"time\":case\"hidden\":case\"password\":case\"button\":case\"reset\":case\"submit\":q.push(form.elements[i].name+\"=\"+encodeURIComponent(form.elements[i].value));break;case\"checkbox\":case\"radio\":if(form.elements[i].checked){q.push(form.elements[i].name+\"=\"+encodeURIComponent(form.elements[i].value))}break;case\"file\":break}break;case\"TEXTAREA\":q.push(form.elements[i].name+\"=\"+encodeURIComponent(form.elements[i].value));break;case\"SELECT\":switch(form.elements[i].type){case\"select-one\":q.push(form.elements[i].name+\"=\"+encodeURIComponent(form.elements[i].value));break;case\"select-multiple\":for(j=0;j<form.elements[i].options.length;j++){if(form.elements[i].options[j].selected){q.push(form.elements[i].name+\"=\"+encodeURIComponent(form.elements[i].options[j].value))}}break}break;case\"BUTTON\":switch(form.elements[i].type){case\"reset\":case\"submit\":case\"button\":q.push(form.elements[i].name+\"=\"+encodeURIComponent(form.elements[i].value));break}break}}return q.join(\"&\")};\n\n    const formSupportsPost = false;\n    var form_submit = function(e) {\n\n        e.preventDefault();\n        if (validate_form()) {\n            if(form_to_submit.querySelector('input[name=\"phone\"]') && typeof iti != 'undefined') {\n                form_to_submit.querySelector('input[name=\"phone\"]').value = iti.getNumber();\n            }\n            \/\/ use this trick to get the submit button & disable it using plain javascript\n            var submitButton = e.target.querySelector('#_form_301_submit');\n            submitButton.disabled = true;\n            submitButton.classList.add('processing');\n                    var serialized = _form_serialize(document.getElementById('_form_301_')).replace(\/%0A\/g, '\\\\n');\n            var err = form_to_submit.querySelector('._form_error');\n            err ? err.parentNode.removeChild(err) : false;\n            async function submitForm() {\n                var formData = new FormData();\n                const searchParams = new URLSearchParams(serialized);\n                searchParams.forEach((value, key) => {\n                    if (key !== 'hideButton') {\n                        formData.append(key, value);\n                    }\n                });\n                let request = {\n                    headers: {\n                        \"Accept\": \"application\/json\"\n                    },\n                    body: formData,\n                    method: \"POST\"\n                };\n\n                let pageUrlParams = new URLSearchParams(window.location.search);\n                if (pageUrlParams.has('t')) {\n                    request.headers.Authorization = 'Bearer ' + pageUrlParams.get('t');\n                }\n                const response = await fetch('https:\/\/deandelafuenteromero.activehosted.com\/proc.php?jsonp=true', request);\n\n                return response.json();\n            }\n            if (formSupportsPost) {\n                submitForm().then((data) => {\n                    eval(data.js);\n                }).catch(() => {\n                    _show_error(\"301\", \"Lo sentimos, ocurri\u00f3 un error con el env\u00edo. Vuelve a intentarlo.\");\n                });\n            } else {\n                _load_script('https:\/\/deandelafuenteromero.activehosted.com\/proc.php?' + serialized + '&jsonp=true', null, true);\n            }\n        }\n        return false;\n    };\n    addEvent(form_to_submit, 'submit', form_submit);\n})();\n\n<\/script><style>\/* Texto junto al checkbox: blanco y en l\u00ednea *\/\n._form_301 ._checkbox-radio label {\n  display: inline !important;\n  margin-left: 8px !important;\n}\n\n\/* Color blanco del texto \"Verifica que eres un humano\" *\/\n._form_301 label[for=\"ls\"],\n._form_301 ._form_element label._form-label {\n  color: #ffffff !important;\n  display: inline-block;\n  font-weight: 400 !important;\n  margin-left: 8px;\n}\n\n\/* Placeholder del campo de email *\/\n#_form_301_ #email::placeholder {\n  color: #002132 !important;\n}\n\n\/* Altura del campo de email reducida *\/\n#_form_301_ #email {\n  padding: 8px 12px !important;\n  height: 40px !important;\n  font-size: 14px !important;\n  line-height: 1.2 !important;\n  margin-bottom: 16px !important;\n}\n<\/style><\/div><\/div><\/span><\/p>\n<h2>Detectar malware en WordPress<\/h2>\n<p>Una vez que ya te has percatado de que tu WordPress ha sido infectado tienes que saber qu\u00e9 tipo de malware te est\u00e1 afectando. Por suerte, puedes hacer uso de algunos plugin que hacen la funci\u00f3n de antivirus, es decir, analizan, detectan y ponen en cuarentena los archivos infectados.<\/p>\n<ul>\n<li><strong>Anti-Malware Security and Brute-Force Firewall<\/strong>. Es un plugin gratuito y se puede descargar directamente desde el repositorio de plugins de WordPress. Actualmente es uno de los m\u00e1s potentes a la hora de detectar malware. Una vez que ha detectado archivos infectados, puedes eliminarlos usando la propia herramienta o desinfectarlos y borrarlos de forma manual.<\/li>\n<li><strong>Ninja Scanner<\/strong>. La ventaja que tiene este plugin respecto al anterior es que puede analizar los archivos del n\u00facleo de WordPress. Rechaza las peticiones externas de PHP protegiendo a tu WordPress de estas inyecciones de c\u00f3digo. Tambi\u00e9n es gratuito y se puede descargar desde el repositorio de WordPress.<\/li>\n<li><strong>WordFence Security<\/strong>. Se trata de uno de los plugin m\u00e1s destacables en cuanto a seguridad aunque debes tener en cuenta que consume bastantes recursos. Aunque tiene una versi\u00f3n premium, la versi\u00f3n de pago permite realizar an\u00e1lisis, aunque no puedes decidir cu\u00e1ndo.<\/li>\n<li><strong>WPScan<\/strong>. Este plugin es especialmente \u00fatil a la hora de detectar posibles vulnerabilidades en tu WordPress, es decir, aquellos resquicios por los que puede entrar en malware a tu p\u00e1gina.<\/li>\n<\/ul>\n<p>Te recomendamos echar un vistazo a <a href=\"https:\/\/alvarofontela.com\/desinfectar-wordpress-hackeado-infectado\/\" target=\"_blank\" rel=\"noopener\">este post<\/a> de \u00c1lvaro Fontela para saber c\u00f3mo configurar y utilizar estos plugins con detalle..<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2756\" src=\"https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/limpiar-wordpress-hackeado.jpg\" alt=\"limpiar-wordpress-hackeado\" width=\"999\" height=\"417\" srcset=\"https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/limpiar-wordpress-hackeado.jpg 999w, https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/limpiar-wordpress-hackeado-300x125.jpg 300w, https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/limpiar-wordpress-hackeado-768x321.jpg 768w\" sizes=\"(max-width: 999px) 100vw, 999px\" \/><\/p>\n<h2>C\u00f3mo limpiar un WordPress hackeado<\/h2>\n<p>Ahora que ya sabes qu\u00e9 es lo que est\u00e1 pasando en tu WordPress ha llegado el momento de hacer una buena limpieza y eliminar el malware. La primera acci\u00f3n que tendr\u00e1s que realizar es la de<strong> eliminar los archivos infectados y sustituirlos por archivos nuevos<\/strong> que necesitar\u00e1s volver a descargar.<\/p>\n<p>Eso s\u00ed, teniendo en cuenta que es posible que haya m\u00e1s archivos infectados de los que hayas podido detectar, lo m\u00e1s recomendable es sustituir todos los archivos de theme, plugins y WordPress por nuevos <strong>archivos que tendr\u00e1s que subir mediante FTP<\/strong>.<\/p>\n<p>En el caso de que tengas alg\u00fan c\u00f3digo personalizado para modificar aspectos del theme, por ejemplo, no tendr\u00e1s otro remedio que volverlo a colocar por si acaso se encontrara infectado tambi\u00e9n.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2757\" src=\"https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/eliminar-hackeo-paso-a-paso.jpg\" alt=\"eliminar-hackeo-paso-a-paso\" width=\"1000\" height=\"474\" srcset=\"https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/eliminar-hackeo-paso-a-paso.jpg 1000w, https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/eliminar-hackeo-paso-a-paso-300x142.jpg 300w, https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/eliminar-hackeo-paso-a-paso-768x364.jpg 768w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><\/p>\n<h2>Pasos para recuperar un WordPress hackeado<\/h2>\n<p><strong>Seguro que quieres saber c\u00f3mo recuperar tu WordPress hackeado<\/strong> as\u00ed que aqu\u00ed te vamos a explicar paso a paso qu\u00e9 es lo que tienes que hacer. Recuerda hacer una copia de seguridad antes de nada.<\/p>\n<ol>\n<li>Crea una carpeta en tu ordenador y <strong>guarda todos los archivos de WordPress reci\u00e9n descargados<\/strong><\/li>\n<li>En la carpeta &#8220;Plugins&#8221; (dentro de &#8220;wp-content&#8221;) <strong>copia las carpetas de los plugins<\/strong> que ten\u00edas instalados pero descarg\u00e1ndolas de las fuentes oficiales<\/li>\n<li>En la carpeta &#8220;Themes&#8221; (dentro de &#8220;wp-content&#8221;) <strong>copia los archivos del theme<\/strong> que ten\u00edas instalado. Si no ten\u00edas un tema-hijo tendr\u00e1s que volver a modificarlo todo pero no hay alternativa.<\/li>\n<li><strong>Elimina todos los plugins y themes que no utilices<\/strong> ya que te arriesgas a volver a infectarte.<\/li>\n<li><strong>Elimina cualquier archivo suelto<\/strong> que no pertenezca a plugin, theme o a la instalaci\u00f3n de WordPress.<\/li>\n<li><strong>Sube esta carpeta por FTP a tu WordPress<\/strong> y comprueba que todo funciona correctamente. Es posible que tengas que hacer alg\u00fan ajuste.<\/li>\n<li><strong>Analiza de nuevo todo el WordPress<\/strong> para corroborar que no quedan archivos infectados.<\/li>\n<\/ol>\n<p>Es posible que te encuentres con que Google ha indexado algunas p\u00e1ginas producto de este malware. De hecho, Google Search Console puede ofrecer pistas al respecto al mostrar palabras y b\u00fasquedas que no tienen nada que ver con el contenido habitual de tu sitio web.<\/p>\n<p>Si esto ha ocurrido, tienes que <strong>enviar una solicitud a Google para que desindexe esas p\u00e1ginas y adem\u00e1s, configurar correctamente tu p\u00e1gina de error 410.<\/strong> La diferencia de una p\u00e1gina de error 410 con la habitual de error 404 es que la 410 indica que esa p\u00e1gina ha sido borrada expresamente y, por lo tanto, Google la eliminar\u00e1 con mucha m\u00e1s rapidez de su \u00edndice.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2758\" src=\"https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/evitar-hackeo-wordpress.jpg\" alt=\"evitar-hackeo-wordpress\" width=\"1000\" height=\"418\" srcset=\"https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/evitar-hackeo-wordpress.jpg 1000w, https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/evitar-hackeo-wordpress-300x125.jpg 300w, https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/evitar-hackeo-wordpress-768x321.jpg 768w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><\/p>\n<h2>Consejos para evitar el hackeo en WordPress<\/h2>\n<p>Nosotros <strong>recomendamos establecer copias de seguridad peri\u00f3dicas en tu sitio web con WordPress para prevenir hackeos<\/strong> y el tener que realizar todas estas acciones para poder recuperar tu p\u00e1gina.<\/p>\n<p>Adem\u00e1s, <strong>como medida de seguridad antihackeo cambia las claves de autentificaci\u00f3n de WordPress y la puerta de entrada al wp-admin<\/strong> para dificultar el acceso a los hackers. Puedes proteger este archivo y wp-config cambiando sus permisos a 444 para protegerlo contra escritura.<\/p>\n<p>Otra de las primeras medidas que debes adoptar es <strong>no usar &#8220;admin&#8221; como nombre de usuario<\/strong>. Es el usuario que WordPress crea por defecto y que tiene un control total de toda la instalaci\u00f3n por lo que es el primer nombre que va a probar un hacker que quiera acceder al panel de administraci\u00f3n de tu p\u00e1gina web.<\/p>\n<blockquote><p>Nunca descargues plugins ni themes de p\u00e1ginas no seguras ni de redes P2P como Torrent o eMule ya que suelen tener archivos infectados<\/p><\/blockquote>\n<p>Adem\u00e1s, aseg\u00farate de que pones <strong>una contrase\u00f1a fuerte<\/strong> con letras, may\u00fasculas, min\u00fasculas y caracteres especiales. Tienes la opci\u00f3n de utilizar el generador de contrase\u00f1as de WordPress, lo cual es muy recomendable.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2759\" src=\"https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/proteger-wordpress.jpg\" alt=\"proteger-wordpress\" width=\"999\" height=\"391\" srcset=\"https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/proteger-wordpress.jpg 999w, https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/proteger-wordpress-300x117.jpg 300w, https:\/\/dinorank.com\/blog\/wp-content\/uploads\/2020\/10\/proteger-wordpress-768x301.jpg 768w\" sizes=\"(max-width: 999px) 100vw, 999px\" \/><\/p>\n<p>Si es posible, <strong>impide el registro de nuevos usuarios<\/strong> para que el atacante no pueda colarse por ah\u00ed en tu WordPress. A\u00f1ade un sistema reCaptcha para evitar que los bots puedan acceder al panel de administraci\u00f3n e instala alg\u00fan plugin que evite intentos de acceso masivos a tu blog, bloque\u00e1ndolo durante unos minutos.<\/p>\n<p>Por \u00faltimo, <strong>actualiza siempre los plugin y el theme de tu p\u00e1gina web as\u00ed como el propio n\u00facleo de WordPress<\/strong> ya que el tener componentes desactualizados puede significar permitir la existencia de vulnerabilidades en tu sitio web. Respecto a los plugin, evita utilizar aquellos que el desarrollador no actualiza desde hace mucho tiempo.<\/p>\n<p>Como ves, la soluci\u00f3n ante un WordPress hackeado pasa por la sustituci\u00f3n de archivos pero tienes que tener en cuenta que en casos m\u00e1s complejos el remedio puede no ser tan sencillo. Por eso, sigue los consejos que te damos en las l\u00edneas anteriores y ponle barreras al malware para proteger tu sitio web.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si est\u00e1s leyendo este post puede ser que tu WordPress haya sido hackeado con c\u00f3digo malicioso o, cuanto menos, sospechas que algo as\u00ed ha podido ocurrir. No tienes que culparte ya que es algo m\u00e1s habitual de lo que crees, en especial cuando estamos hablando de WordPress, el CMS m\u00e1s popular hoy d\u00eda entre quienes [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":2785,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[10],"tags":[],"class_list":["post-2746","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aprender-seo"],"acf":[],"_links":{"self":[{"href":"https:\/\/dinorank.com\/blog\/wp-json\/wp\/v2\/posts\/2746","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dinorank.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dinorank.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dinorank.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/dinorank.com\/blog\/wp-json\/wp\/v2\/comments?post=2746"}],"version-history":[{"count":5,"href":"https:\/\/dinorank.com\/blog\/wp-json\/wp\/v2\/posts\/2746\/revisions"}],"predecessor-version":[{"id":29549,"href":"https:\/\/dinorank.com\/blog\/wp-json\/wp\/v2\/posts\/2746\/revisions\/29549"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dinorank.com\/blog\/wp-json\/wp\/v2\/media\/2785"}],"wp:attachment":[{"href":"https:\/\/dinorank.com\/blog\/wp-json\/wp\/v2\/media?parent=2746"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dinorank.com\/blog\/wp-json\/wp\/v2\/categories?post=2746"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dinorank.com\/blog\/wp-json\/wp\/v2\/tags?post=2746"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}