<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Israel Del Angel</title>
    <description>The latest articles on DEV Community by Israel Del Angel (@thelordofth3cloud).</description>
    <link>https://dev.to/thelordofth3cloud</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F38062%2F679015ee-0c88-4fb1-ac98-32a555b387b5.jpeg</url>
      <title>DEV Community: Israel Del Angel</title>
      <link>https://dev.to/thelordofth3cloud</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thelordofth3cloud"/>
    <language>en</language>
    <item>
      <title>¡Navegando a la Seguridad Divertida con Cloudflare! Protegiendo tu Ciberburbuja con Estilo</title>
      <dc:creator>Israel Del Angel</dc:creator>
      <pubDate>Wed, 20 Sep 2023 15:28:12 +0000</pubDate>
      <link>https://dev.to/thelordofth3cloud/navegando-a-la-seguridad-divertida-con-cloudflare-protegiendo-tu-ciberburbuja-con-estilo-4ci6</link>
      <guid>https://dev.to/thelordofth3cloud/navegando-a-la-seguridad-divertida-con-cloudflare-protegiendo-tu-ciberburbuja-con-estilo-4ci6</guid>
      <description>&lt;p&gt;Bienvenidos al emocionante mundo de la ciberseguridad, donde los virus, los hackers y las contraseñas olvidadas acechan a cada clic. Pero no te preocupes, amigo mío, ¡estamos aquí para hablarte de Cloudflare y cómo hacen que tu vida en línea sea un paseo emocionante, seguro y lleno de diversión!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;El Mago de Internet: Cloudflare&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagina a Cloudflare como un mago digital, sacando trucos asombrosos para proteger tu información en línea &lt;strong&gt;Abada-Cadabra&lt;/strong&gt;. Este mago mágico actúa como un escudo entre tú y el caos digital &lt;strong&gt;Protegio&lt;/strong&gt;, garantizando que tus datos estén a salvo y los hackers estén en la oscuridad &lt;strong&gt;Revelio&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Cómo Funciona este Truco Genial?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para entenderlo, piensa en un mago que protege su tesoro. Cuando un hacker intenta robar tu información, se encuentra con una barrera invisible, gracias a los servidores globales de Cloudflare. Estos servidores interceptan los ataques maliciosos y desvían el tráfico dañino, dejando tu ciberburbuja a salvo y sonriendo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplos en la Vida Real, ¡Aventuras Cibernéticas!&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;La Guarida Bancaria&lt;/strong&gt;: Cuando accedes a tu cuenta bancaria en línea, Cloudflare está allí como tu guardaespaldas virtual. Si nota algo sospechoso, como un intento de inicio de sesión desde un lugar lejano y exótico, te pedirá una contraseña extra o un autenticador. ¡Protección bancaria en un abrir y cerrar de ojos!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Defensa Épica contra los Ataques DDoS&lt;/strong&gt;: Los ataques DDoS son como una tormenta cibernética que puede dejar un sitio web indefenso. Pero Cloudflare es como Thor en el mundo de la ciberseguridad, enfrentando los rayos y truenos para mantener tu sitio en pie. ¡Así es, el rayo de seguridad de Cloudflare ilumina el camino!&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Diversión en el Mundo de la Ciberseguridad&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cloudflare también sabe cómo hacer que la seguridad sea divertida. Participa en "Project Galileo", donde brinda protección gratuita a sitios web y organizaciones sin fines de lucro que luchan contra la censura en línea. ¡Una ciberseguridad con un propósito noble y un toque de humor!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;La Gran Conclusión&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En un mundo digital lleno de sorpresas y peligros, Cloudflare es tu compañero de juegos cibernéticos. Con ejemplos emocionantes de la vida real y un enfoque fresco y divertido en la seguridad, puedes navegar por la web con confianza y una sonrisa. Así que, la próxima vez que alguien mencione la ciberseguridad, asegúrate de que Cloudflare esté en el escenario, ¡preparado para hacer desaparecer las amenazas y hacerte disfrutar del emocionante viaje en línea! ¡Sigue explorando el ciberespacio con estilo y diversión!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Power Up Your API with Cloud Magic: Lambda Functions in Node.js</title>
      <dc:creator>Israel Del Angel</dc:creator>
      <pubDate>Sun, 17 Sep 2023 01:46:40 +0000</pubDate>
      <link>https://dev.to/thelordofth3cloud/power-up-your-api-with-cloud-magic-lambda-functions-in-nodejs-107b</link>
      <guid>https://dev.to/thelordofth3cloud/power-up-your-api-with-cloud-magic-lambda-functions-in-nodejs-107b</guid>
      <description>&lt;p&gt;Welcome, daring developers! Today, we're diving into a technology that makes our APIs faster, more efficient, and more elegant than ever before: Lambda Functions in Node.js! In this exciting journey, we'll immerse ourselves in the thrilling world of lambda functions and discover why they are the key to taking your APIs to the next level.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prepare Your Superpowers!
&lt;/h2&gt;

&lt;p&gt;Before we dive into the world of lambda functions, make sure you have everything you need:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Node.js:&lt;/strong&gt; Make sure Node.js is installed in your toolkit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cloud Account:&lt;/strong&gt; You'll need an account on the cloud service platform of your choice. In our example, we'll use AWS Lambda, but feel free to choose your favorite platform.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Magic Begins with Lambda Functions!
&lt;/h2&gt;

&lt;p&gt;Lambda functions, also known as "anonymous functions," are small pieces of code that can work wonders in the cloud. In our case, we're going to create a lambda function that adds two numbers in the blink of an eye. Here we go!&lt;/p&gt;

&lt;h3&gt;
  
  
  Advantages of Lambda Functions
&lt;/h3&gt;

&lt;p&gt;But before we get started, let's take a look at the advantages these little wonders can offer:&lt;/p&gt;

&lt;h4&gt;
  
  
  Automatic Scalability
&lt;/h4&gt;

&lt;p&gt;Lambda functions can automatically scale based on demand, making them ideal for sudden traffic spikes.&lt;/p&gt;

&lt;h4&gt;
  
  
  Cost-Efficiency
&lt;/h4&gt;

&lt;p&gt;You only pay for the actual runtime of the function, making them a cost-effective choice.&lt;/p&gt;

&lt;h4&gt;
  
  
  Facilitates Serverless Architecture
&lt;/h4&gt;

&lt;p&gt;Lambda functions are essential in serverless architecture, reducing development complexity.&lt;/p&gt;

&lt;h4&gt;
  
  
  Rapid Implementation
&lt;/h4&gt;

&lt;p&gt;You can develop and deploy lambda functions quickly, perfect for agile API development.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Casting the Spell
&lt;/h3&gt;

&lt;p&gt;First, create a new directory for your project and navigate to it in your magic broomstick terminal. Then, initialize a Node.js project with a simple command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm init &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Invoke Your AWS Power
&lt;/h3&gt;

&lt;p&gt;We're going to need the power of AWS for this adventure. Add the &lt;code&gt;aws-sdk&lt;/code&gt; dependency to interact with AWS Lambda:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;aws-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Crafting the Magic Potion
&lt;/h3&gt;

&lt;p&gt;Now, create a file called &lt;code&gt;lambda.js&lt;/code&gt; and pour your magic into it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Import the AWS SDK module&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;AWS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-sdk&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lambda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;AWS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Lambda&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Lambda function that takes two numbers and returns their sum&lt;/span&gt;
&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Extract the numbers from the request&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;num1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;num2&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Perform the addition&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;num1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;num2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Return the response&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;statusCode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;sum&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// In case of an error, return an error message&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;statusCode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;There was an error in the lambda function!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Disadvantages of Using Lambda Functions
&lt;/h3&gt;

&lt;p&gt;But, as in all magic, there are disadvantages too:&lt;/p&gt;

&lt;h4&gt;
  
  
  Runtime Limitations
&lt;/h4&gt;

&lt;p&gt;Lambda platforms often impose time limits on function execution.&lt;/p&gt;

&lt;h4&gt;
  
  
  Limited Language Compatibility
&lt;/h4&gt;

&lt;p&gt;Compatibility can be limited compared to more traditional environments.&lt;/p&gt;

&lt;h4&gt;
  
  
  Initial Increased Latency
&lt;/h4&gt;

&lt;p&gt;The execution of a lambda function can experience higher initial latency compared to a waiting server.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Casting the Spell
&lt;/h3&gt;

&lt;p&gt;It's time to cast your spell. Package your lambda function and its ingredients into a ZIP file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;zip &lt;span class="nt"&gt;-r&lt;/span&gt; lambda.zip lambda.js node_modules/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, create a lambda function in AWS Lambda through the AWS console or using the AWS CLI. Upload your ZIP file as the magic code for your function.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: The Testing Moment!
&lt;/h3&gt;

&lt;p&gt;Test your lambda function through the AWS Lambda console or using the AWS CLI. Send a request with two numbers and watch the magic happen. You'll receive a response with the sum of the numbers you provided.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add a Magical Touch to Your APIs!
&lt;/h2&gt;

&lt;p&gt;With this exciting example of a lambda function in Node.js, you can add a magical touch to your APIs. Take advantage of automatic scalability, cost efficiency, and the speed of lambda functions to take your applications to the next level! May the magic be with you, daring developer! ✨🚀&lt;/p&gt;

</description>
      <category>javascript</category>
    </item>
    <item>
      <title>Potencia Tu API con Magia en la Nube: Funciones Lambda en Node.js</title>
      <dc:creator>Israel Del Angel</dc:creator>
      <pubDate>Sun, 17 Sep 2023 01:18:26 +0000</pubDate>
      <link>https://dev.to/thelordofth3cloud/potencia-tu-api-con-magia-en-la-nube-funciones-lambda-en-nodejs-2kpg</link>
      <guid>https://dev.to/thelordofth3cloud/potencia-tu-api-con-magia-en-la-nube-funciones-lambda-en-nodejs-2kpg</guid>
      <description>&lt;p&gt;¡Bienvenidos, desarrolladores intrépidos! Hoy vamos a explorar una tecnología que hace que nuestras APIs sean más rápidas, eficientes y elegantes que nunca: ¡las funciones Lambda en Node.js! En este viaje emocionante, vamos a sumergirnos en el emocionante mundo de las funciones lambda y descubrir por qué son la clave para llevar tus APIs al siguiente nivel.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¡Prepara tus Superpoderes!
&lt;/h2&gt;

&lt;p&gt;Antes de sumergirnos en el mundo de las funciones lambda, asegúrate de tener todo lo que necesitas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Node.js:&lt;/strong&gt; Asegúrate de que Node.js esté instalado en tu cinturón de herramientas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cuenta en la Nube:&lt;/strong&gt; Necesitarás una cuenta en la plataforma de servicios en la nube de tu elección. En nuestro ejemplo, usaremos AWS Lambda, pero siéntete libre de elegir tu plataforma favorita.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  ¡La Magia Comienza con la Función Lambda!
&lt;/h2&gt;

&lt;p&gt;Las funciones lambda, también conocidas como "funciones anónimas", son pequeños fragmentos de código que pueden hacer maravillas en la nube. En nuestro caso, vamos a crear una función lambda que suma dos números en un abrir y cerrar de ojos. ¡Aquí vamos!&lt;/p&gt;

&lt;h3&gt;
  
  
  Ventajas de las Funciones Lambda
&lt;/h3&gt;

&lt;p&gt;Pero antes de comenzar, echemos un vistazo a las ventajas que estas pequeñas maravillas pueden ofrecer:&lt;/p&gt;

&lt;h4&gt;
  
  
  Escalabilidad Automática
&lt;/h4&gt;

&lt;p&gt;Las funciones lambda pueden escalar automáticamente según la demanda, lo que las hace ideales para picos de tráfico repentinos.&lt;/p&gt;

&lt;h4&gt;
  
  
  Costos Eficientes
&lt;/h4&gt;

&lt;p&gt;Solo pagas por el tiempo de ejecución real de la función, lo que las convierte en una opción económica.&lt;/p&gt;

&lt;h4&gt;
  
  
  Facilita la Arquitectura Serverless
&lt;/h4&gt;

&lt;p&gt;Las funciones lambda son esenciales en la arquitectura serverless, lo que reduce la complejidad del desarrollo.&lt;/p&gt;

&lt;h4&gt;
  
  
  Rápida Implementación
&lt;/h4&gt;

&lt;p&gt;Puedes desarrollar y desplegar funciones lambda rápidamente, perfecto para el desarrollo ágil de APIs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 1: Iniciando el Hechizo
&lt;/h3&gt;

&lt;p&gt;En primer lugar, crea un nuevo directorio para tu proyecto y navega hasta él en tu escoba mágica terminal. Luego, inicializa un proyecto Node.js con un simple comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm init &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Paso 2: Invoca tu Poder AWS
&lt;/h3&gt;

&lt;p&gt;Vamos a necesitar el poder de AWS para esta aventura. Agrega la dependencia &lt;code&gt;aws-sdk&lt;/code&gt; para interactuar con AWS Lambda:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;aws-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Paso 3: La Creación de la Poción Mágica
&lt;/h3&gt;

&lt;p&gt;Ahora, crea un archivo llamado &lt;code&gt;lambda.js&lt;/code&gt; y vierte tu magia en él:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Importa el módulo AWS SDK&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;AWS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-sdk&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lambda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;AWS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Lambda&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Función lambda que toma dos números y devuelve su suma&lt;/span&gt;
&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Extrae los números de la solicitud&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;num1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;num2&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Realiza la suma&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;suma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;num1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;num2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Devuelve la respuesta&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;statusCode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;suma&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// En caso de error, devuelve un mensaje de error&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;statusCode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;¡Hubo un error en la función lambda!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Desventajas de Utilizar Funciones Lambda
&lt;/h3&gt;

&lt;p&gt;Pero, como en toda magia, también existen desventajas:&lt;/p&gt;

&lt;h4&gt;
  
  
  Limitaciones de Tiempo de Ejecución
&lt;/h4&gt;

&lt;p&gt;Las plataformas de funciones lambda a menudo imponen límites en el tiempo de ejecución de una función.&lt;/p&gt;

&lt;h4&gt;
  
  
  Compatibilidad con Lenguajes Limitada
&lt;/h4&gt;

&lt;p&gt;La compatibilidad puede ser limitada en comparación con entornos más tradicionales.&lt;/p&gt;

&lt;h4&gt;
  
  
  Mayor Latencia Inicial
&lt;/h4&gt;

&lt;p&gt;La ejecución de una función lambda puede experimentar una latencia inicial más alta en comparación con un servidor en espera.&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 4: Lanzamiento del Hechizo
&lt;/h3&gt;

&lt;p&gt;Es hora de lanzar tu hechizo. Empaqueta tu función lambda y sus ingredientes en un archivo ZIP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;zip &lt;span class="nt"&gt;-r&lt;/span&gt; lambda.zip lambda.js node_modules/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Luego, crea una función lambda en AWS Lambda a través de la consola de AWS o usando la CLI de AWS. Sube tu archivo ZIP como el código mágico de tu función.&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 5: ¡Momento de la Prueba!
&lt;/h3&gt;

&lt;p&gt;Prueba tu función lambda a través de la consola de AWS Lambda o usando la CLI de AWS. Envía una solicitud con dos números y observa cómo la magia ocurre. Obtendrás una respuesta con la suma de los números que proporcionaste.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¡Agrega un Toque Mágico a tus APIs!
&lt;/h2&gt;

&lt;p&gt;Con este emocionante ejemplo de función lambda en Node.js, puedes darle un toque mágico a tus APIs. ¡Aprovecha la escalabilidad automática, los costos eficientes y la velocidad de las funciones lambda para llevar tus aplicaciones al siguiente nivel! ¡Que la magia esté contigo, desarrollador intrépido! ✨🚀&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Patron de diseño de módulo, eso como se come</title>
      <dc:creator>Israel Del Angel</dc:creator>
      <pubDate>Fri, 17 Feb 2023 00:02:33 +0000</pubDate>
      <link>https://dev.to/thelordofth3cloud/patron-de-diseno-de-modulo-eso-como-se-come-5g13</link>
      <guid>https://dev.to/thelordofth3cloud/patron-de-diseno-de-modulo-eso-como-se-come-5g13</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Introducción&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;El patrón de diseño de módulo es un patrón muy popular en la programación orientada a objetos que se utiliza para organizar el código en módulos independientes y reutilizables. Con React, este patrón se puede aplicar de manera efectiva para crear componentes reutilizables y mantener una estructura clara y fácil de entender en la aplicación. En este artículo, vamos a explorar cómo implementar el patrón de diseño de módulo con React, y cómo aplicarlo en la sintaxis y nomenclatura.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;¿Qué es el patrón de diseño de módulo?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;El patrón de diseño de módulo es un patrón de diseño de software que se utiliza para organizar el código en módulos independientes y reutilizables. En este patrón, cada módulo se crea como una entidad independiente con su propia interfaz pública, y el módulo solo expone las funciones y variables que desea compartir con otros módulos. Esto ayuda a mantener el código organizado y fácil de entender, y permite una fácil reutilización del código en diferentes partes de la aplicación.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Cómo implementar el patrón de diseño de módulo en React&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;En React, el patrón de diseño de módulo se puede implementar creando componentes reutilizables que se pueden utilizar en diferentes partes de la aplicación. Cada componente se crea como un módulo independiente, y se expone solo la interfaz pública que desea compartir con otros componentes.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;*&lt;em&gt;Para implementar el patrón de diseño de módulo en React, siga los siguientes pasos:&lt;br&gt;
*&lt;/em&gt;&lt;/em&gt;&lt;br&gt;
Cree un archivo para cada componente: Para comenzar, cree un archivo para cada componente que desee crear. Cada archivo debe contener solo el código relacionado con ese componente.&lt;/p&gt;

&lt;p&gt;Defina una interfaz pública para cada componente: Cada componente debe tener una interfaz pública claramente definida que especifique las propiedades que acepta y los eventos que puede desencadenar.&lt;/p&gt;

&lt;p&gt;Exponga solo la interfaz pública: Una vez que haya definido la interfaz pública de cada componente, exponga solo las propiedades y los eventos que desea compartir con otros componentes.&lt;/p&gt;

&lt;p&gt;Importe los componentes según sea necesario: Finalmente, importe los componentes según sea necesario en otras partes de la aplicación.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Ejemplo de implementación del patrón de diseño de módulo en React&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Supongamos que queremos crear un componente de botón reutilizable que se pueda utilizar en diferentes partes de la aplicación. Para hacer esto, creamos un archivo "Button.js" para el componente de botón, y definimos su interfaz pública de la siguiente manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from 'react';

function Button(props) {
  const { label, onClick } = props;

  return (
    &amp;lt;button onClick={onClick}&amp;gt;{label}&amp;lt;/button&amp;gt;
  );
}

export default Button;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En este ejemplo, la interfaz pública del componente de botón consta de dos propiedades: label y onClick. label especifica el texto que se muestra en el botón, mientras que onClick especifica la función que se debe llamar cuando se hace clic en el botón.&lt;/p&gt;

&lt;p&gt;Para utilizar el componente de botón en otra parte de la aplicación, simplemente importamos el archivo Button.js y lo usamos en nuestro código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from 'react';
import Button from './Button';

function MyComponent() {
  return (
    &amp;lt;div&amp;gt;
      &amp;lt;Button label="Click me" onClick={() =&amp;gt; alert
("Button clicked")} /&amp;gt;
&amp;lt;/div&amp;gt;
);
}

export default MyComponent;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En este ejemplo, importamos el componente de botón desde el archivo Button.js y lo usamos en el componente MyComponent. Le pasamos las propiedades &lt;code&gt;label&lt;/code&gt; y &lt;code&gt;onClick&lt;/code&gt; al componente de botón para personalizar su apariencia y comportamiento.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;*&lt;em&gt;Nomenclatura en el patrón de diseño de módulo con React&lt;br&gt;
*&lt;/em&gt;&lt;/em&gt;&lt;br&gt;
En el patrón de diseño de módulo con React, es importante seguir una nomenclatura consistente y clara para nombrar los componentes y los archivos relacionados. Aquí hay algunas convenciones de nomenclatura comunes que se pueden seguir:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Use nombres descriptivos: Los nombres de los componentes y los archivos deben ser descriptivos y reflejar el propósito del componente.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use PascalCase para los nombres de componentes: Los nombres de los componentes deben seguir la convención de PascalCase, donde la primera letra de cada palabra está en mayúscula.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use camelCase para los nombres de los archivos: Los nombres de los archivos deben seguir la convención de camelCase, donde la primera letra de la primera palabra está en minúscula y la primera letra de cada palabra subsiguiente está en mayúscula.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use index.js para el archivo principal: Si tiene un archivo principal para un grupo de componentes relacionados, llámelo index.js y colóquelo en la raíz del directorio.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Conclusión&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;El patrón de diseño de módulo es una forma efectiva de organizar el código en módulos independientes y reutilizables. En React, este patrón se puede aplicar para crear componentes reutilizables y mantener una estructura clara y fácil de entender en la aplicación. Al seguir las convenciones de nomenclatura adecuadas y exponer solo la interfaz pública de cada componente, podemos crear componentes altamente reutilizables y fáciles de mantener.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>AI TESTING</title>
      <dc:creator>Israel Del Angel</dc:creator>
      <pubDate>Wed, 18 Jan 2023 20:16:47 +0000</pubDate>
      <link>https://dev.to/thelordofth3cloud/ai-testing-4jj</link>
      <guid>https://dev.to/thelordofth3cloud/ai-testing-4jj</guid>
      <description>&lt;p&gt;Artificial intelligence (AI) testing is a crucial step in the development and deployment of AI systems. The goal of AI testing is to ensure that the system functions as intended and can handle a wide range of inputs and situations.&lt;/p&gt;

&lt;p&gt;One of the main challenges in AI testing is dealing with the complexity and variability of the system. AI systems are often composed of multiple layers of algorithms, each of which can have its own set of parameters and behaviors. This makes it difficult to predict how the system will behave in different scenarios.&lt;/p&gt;

&lt;p&gt;To address this challenge, AI testing typically involves a combination of different methods, including:&lt;/p&gt;

&lt;p&gt;Unit testing: This is the process of testing individual components of the AI system, such as individual algorithms or modules. Unit testing helps to ensure that each component is functioning correctly and can help to identify and fix bugs early in the development process.&lt;/p&gt;

&lt;p&gt;Integration testing: This is the process of testing how different components of the AI system work together. Integration testing helps to ensure that the system as a whole is functioning correctly and can identify and fix issues that may not be apparent during unit testing.&lt;/p&gt;

&lt;p&gt;Functional testing: This is the process of testing the system's ability to perform specific tasks or functions. This can include testing the system's accuracy, performance, and ability to handle different inputs and scenarios.&lt;/p&gt;

&lt;p&gt;Non-functional testing: This is the process of testing the system's behavior under different conditions. This can include testing the system's performance, scalability, and robustness.&lt;/p&gt;

&lt;p&gt;User acceptance testing: This is the process of testing the system with actual users to ensure that it meets their needs and expectations. User acceptance testing can provide valuable feedback on the system's usability and user experience.&lt;/p&gt;

&lt;p&gt;It is important to note that AI testing is an ongoing process. As AI systems are deployed in the real world, they will encounter new and unexpected situations. Continuous testing and monitoring can help to ensure that the system remains reliable and performs as intended.&lt;/p&gt;

&lt;p&gt;In conclusion, AI testing is a crucial step in the development and deployment of AI systems. It helps to ensure that the system functions as intended and can handle a wide range of inputs and situations. A combination of different testing methods, including unit testing, integration testing, functional testing, non-functional testing and user acceptance testing, is used to thoroughly test AI systems. Continuous testing and monitoring is important to ensure that the system remains reliable and performs as intended.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>testing</category>
      <category>devops</category>
    </item>
    <item>
      <title>Como optimizar una pagina web para SEO</title>
      <dc:creator>Israel Del Angel</dc:creator>
      <pubDate>Mon, 11 Nov 2019 19:42:57 +0000</pubDate>
      <link>https://dev.to/thelordofth3cloud/como-optimizar-una-pagina-web-para-seo-5an6</link>
      <guid>https://dev.to/thelordofth3cloud/como-optimizar-una-pagina-web-para-seo-5an6</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/@isradlangel?source=post_page-----348633bd30c0----------------------"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HdgB708a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/fit/c/48/48/2%2AqS15X9GwvewoVN3RP1n8pw.png" alt="Israel Ramirez" width="48" height="47"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZTbfJJAP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/4688/0%2Aj2D5e4KAo3k4jHbq" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZTbfJJAP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/4688/0%2Aj2D5e4KAo3k4jHbq" alt="img" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@webaroo?utm_source=medium&amp;amp;utm_medium=referral"&gt;Web Hosting&lt;/a&gt; on &lt;a href="https://unsplash.com/?utm_source=medium&amp;amp;utm_medium=referral"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como desarrolladores cuando comenzamos a construir una** pagina web** nos centramos en temas de &lt;strong&gt;UI/UX&lt;/strong&gt; y dejamos de lado el tema del &lt;strong&gt;posicionamiento&lt;/strong&gt; siendo que nuestros clientes acuden a nosotros para construir su &lt;strong&gt;marca digital&lt;/strong&gt; a travez de su &lt;strong&gt;sitio web&lt;/strong&gt; .&lt;/p&gt;

&lt;p&gt;En este post vamos a hablar sobre &lt;strong&gt;cómo optimizar los principales factores de posicionamiento así como los principales problemas SEO que surgen a la hora de optimizar una web&lt;/strong&gt; y sus posibles soluciones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dividiremos los temas de este capítulo en 4 grandes bloques:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Accesibilidad&lt;/li&gt;
&lt;li&gt;Indexabilidad&lt;/li&gt;
&lt;li&gt;Contenido&lt;/li&gt;
&lt;li&gt;Meta etiquetas&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  1. Accesibilidad
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;El primer paso a la hora de optimizar el SEO de una web es permitir el acceso a los motores de búsqueda a nuestro contenido.&lt;/strong&gt; Es decir, hay que comprobar si la web es visible a los ojos de los motores de búsqueda y sobre todo, cómo están viendo la página.&lt;/p&gt;

&lt;p&gt;Por diversos motivos que explicaremos más adelante puede darse el caso de que los motores de búsqueda no puedan leer correctamente una web, un requisito indispensable para el posicionamiento.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aspectos a tener en cuenta para una buena accesibilidad&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Archivo robots txt&lt;/li&gt;
&lt;li&gt;Meta etiqueta robots&lt;/li&gt;
&lt;li&gt;Códigos de estado HTTP&lt;/li&gt;
&lt;li&gt;Sitemap&lt;/li&gt;
&lt;li&gt;Estructura web&lt;/li&gt;
&lt;li&gt;JavaScript y CSS&lt;/li&gt;
&lt;li&gt;Velocidad de la web&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Archivo robots txt
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;El archivo robots.txt se usa para impedir que los motores de búsqueda accedan e indexen ciertas partes de una web.&lt;/strong&gt; Es muy útil para evitar que Google muestre en los resultados de búsqueda las páginas que no queremos. Por ejemplo en WordPress, para que no accedan a los archivos de administrador, el archivo robots.txt sería así:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;User agent:*&lt;/p&gt;

&lt;p&gt;Disallow:/wp-admin&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OJO:&lt;/strong&gt; Debes tener mucho cuidado de no bloquear el acceso de los motores de búsqueda a toda tu web sin darte cuenta como en este ejemplo:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;User agent:*&lt;/p&gt;

&lt;p&gt;Disallow:/&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Debemos comprobar que el archivo robots.txt no está bloqueando ninguna parte importante de nuestra web.&lt;/strong&gt; Podemos hacerlo visitando la url &lt;a href="https://medium.com/@isradlangel/www.ejemplo.com/robots.txt"&gt;www.ejemplo.com/robots.txt&lt;/a&gt;, o bien a través de Google Webmaster Tools en “Rastreo” &amp;gt; “Probador de robots.txt”&lt;/p&gt;

&lt;p&gt;El archivo robots.txt también puede usarse para indicar dónde se encuentra nuestro sitemap añadiendo en la última línea del documento.&lt;/p&gt;

&lt;p&gt;Por lo tanto, un ejemplo de robots.txt completo para WordPress se vería así:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;User-agent:*&lt;/p&gt;

&lt;p&gt;Disallow:/wp-admin&lt;/p&gt;

&lt;p&gt;Sitemap:&lt;a href="http://www.ejemplo.com/sitemap.xml"&gt;http://www.ejemplo.com/sitemap.xml&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si quieres profundizar más en detalle sobre este archivo, te recomendamos visitar &lt;a href="http://www.robotstxt.org/"&gt;la web con la información sobre el estándar.&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Meta etiqueta Robot
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;La meta etiqueta “robots” se utiliza para decirle a los robots de los motores de búsqueda si pueden o no indexar la página y si deben seguir los enlaces que contiene.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A la hora de analizar una página deberás comprobar si hay alguna meta etiqueta que por error esté bloqueando el acceso a estos robots. Este es un ejemplo de cómo se verían estas etiquetas en el código HTML:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Por otra parte las meta etiquetas son muy útiles para evitar que Google indexe páginas que no te interesen, como pueden ser las paginaciones o los filtros, pero que siga los enlaces para que continúe rastreando nuestra web. En este caso la etiqueta quedaría así:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Podemos comprobar las meta etiquetas haciendo click derecho en la página y seleccionando “ver código fuente de la página”.&lt;/p&gt;

&lt;p&gt;O si queremos ir un poco más allá, con la herramienta &lt;a href="http://www.screamingfrog.co.uk/seo-spider/"&gt;Screaming Frog&lt;/a&gt; podemos ver de un vistazo qué páginas de toda la web tienen implementada dicha etiqueta. Puedes verlo en la pestaña “Directives” y en el campo de “Meta Robots 1”. Una vez tengas localizadas todas las páginas con esta etiquetas solo tienes que eliminarlas.&lt;/p&gt;

&lt;h1&gt;
  
  
  Códigos de estado HTTP
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;En el caso de que alguna URL devuelva un código de estado (404, 502, etc), los usuarios y los motores de búsqueda no podrán acceder a esa página.&lt;/strong&gt; Para identificar estas URLs os recomendamos usar también Screaming Frog, porque muestra rápidamente el estado de todas las URLs de tu página.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IDEA:&lt;/strong&gt; Cada vez que hagas una nueva búsqueda en Screaming Frog exporta el resultado en un CSV. Así los podrás reunir todas en un mismo Excel más tarde.&lt;/p&gt;

&lt;h1&gt;
  
  
  Sitemap
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;El sitemap es un archivo XML que contiene una lista de las páginas del sitio&lt;/strong&gt; junto con alguna información adicional, como con qué frecuencia la página cambia sus contenidos, cuándo fue su última actualización, etc.&lt;/p&gt;

&lt;p&gt;Un pequeño extracto de un sitemap sería:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt; &lt;a href="http://www.ejemplo.com/"&gt;http://www.ejemplo.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;daily&lt;/p&gt;

&lt;p&gt;1.0&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Puntos importantes que debes comprobar respecto al Sitemap, que:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Siga los protocolos, si no Google no lo procesará adecuadamente&lt;/li&gt;
&lt;li&gt;Esté subido a Google Webmaster Tools&lt;/li&gt;
&lt;li&gt;Esté actualizado. Cuando actualices tu web, asegúrate que tienes todas las páginas nuevas en tu sitemap&lt;/li&gt;
&lt;li&gt;Todas las páginas que hay en el sitemap estén siendo indexadas por Google&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;En caso de que la web no disponga de ningún sitemap deberemos crear uno, siguiendo cuatro pasos:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Genera un Excel con todas las páginas que queramos que se indexen, para ello usaremos el mismo Excel que creamos al hacer las búsqueda de los códigos de respuesta HTTP&lt;/li&gt;
&lt;li&gt;Crea el sitemap. Para ello te recomendamos la herramienta &lt;a href="https://www.xml-sitemaps.com/"&gt;Sitemap Generators&lt;/a&gt; (sencilla y muy completa)&lt;/li&gt;
&lt;li&gt;Compara las páginas que hay en tu excel y las que hay en el sitemap y elimina del excel las que no queremos que se indexen&lt;/li&gt;
&lt;li&gt;Sube el sitemap a través de Google Webmaster Tools&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Estructura web
&lt;/h1&gt;

&lt;p&gt;Si la estructura de una web es demasiado profunda a Google le resultará más difícil llegar a todas las páginas. Así que &lt;strong&gt;se recomienda que la estructura no tenga más de 3 niveles de profundidad,&lt;/strong&gt; (sin contar la home) ya que el robot de Google tiene un tiempo limitado para rastrear una web, y cuantos más niveles tenga que atravesar menos tiempo le quedará para acceder a las páginas más profundas&lt;/p&gt;

&lt;p&gt;Por eso es mejor siempre crear un estructura web en horizontal y no en vertical.&lt;/p&gt;

&lt;h2&gt;
  
  
  Estructura Vertical
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4j6_ToSm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/30/1%2AGOL8iZSttlPkO7dMy1x6pA.png%3Fq%3D20" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4j6_ToSm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/30/1%2AGOL8iZSttlPkO7dMy1x6pA.png%3Fq%3D20" alt="img" width="30" height="22"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xDGtkQ9G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/700/1%2AGOL8iZSttlPkO7dMy1x6pA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xDGtkQ9G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/700/1%2AGOL8iZSttlPkO7dMy1x6pA.png" alt="img" width="700" height="527"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Estructura horizontal
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mZUenduD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/30/1%2AzKPMaVoci2VKIG2Mb99vrA.png%3Fq%3D20" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mZUenduD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/30/1%2AzKPMaVoci2VKIG2Mb99vrA.png%3Fq%3D20" alt="img" width="30" height="11"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZOMUHrhR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/700/1%2AzKPMaVoci2VKIG2Mb99vrA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZOMUHrhR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/700/1%2AzKPMaVoci2VKIG2Mb99vrA.png" alt="img" width="700" height="265"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nuestro consejo es hacer un esquema de toda la web en el que se pueda ver fácilmente los niveles que tiene, desde la home hasta la página más profunda y poder calcular cuántos clics hacen falta para llegar a ella.&lt;/p&gt;

&lt;p&gt;Localiza en qué nivel está cada página y si tienes enlaces apuntando hacia ella utilizando de nuevo Screaming Frog.&lt;/p&gt;

&lt;h1&gt;
  
  
  JavaScript y CSS
&lt;/h1&gt;

&lt;p&gt;Aunque en los últimos años Google se ha vuelto más inteligente a la hora de leer este tipo de tecnologías debemos tener cuidado porque el JavaScript puede ocultar parte de nuestro contenido y el CSS puede desordenarlo mostrándolo en otro orden al que lo ve Google.&lt;/p&gt;

&lt;p&gt;Existen dos métodos para saber cómo lee Google una página:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Plugins&lt;/li&gt;
&lt;li&gt;Comando “cache:”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Los plugins como Web Developer o Disable-HTML nos ayudan a ver cómo “rastrea” la web un buscador. Para ello hay que abrir una de estas herramientas y desactivar el JavaScript. Esto lo hacemos porque todos los menús desplegables, enlaces y textos deben poder ser leídos por Google.&lt;/p&gt;

&lt;p&gt;Después desactivamos el CSS, ya que queremos ver el orden real del contenido y el CSS puede cambiar esto completamente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Comando “cache:”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Otra forma de saber cómo ve Google una web es mediante el comando “cache:”&lt;/p&gt;

&lt;p&gt;Introduce “cache:&lt;a href="https://medium.com/@isradlangel/www.miejemplo.com"&gt;www.miejemplo.com&lt;/a&gt;” en el buscador y pulsa en “Versión sólo texto”. Google te mostrará una foto donde podrás saber cómo lee una web y cuándo fue la última vez que accedió a ella.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Eso sí, para que el comando “cache:” funcione correctamente nuestras páginas deben estar previamente indexadas en los índices de Google.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Una vez que Google indexa por primera vez una página, determina con qué frecuencia volverá a visitarla en busca de actualizaciones. Esto dependerá de la autoridad y relevancia del dominio al que pertenece esa página y de la frecuencia con que se actualice.&lt;/p&gt;

&lt;p&gt;Ya sea por medio de un plugin o el comando “cache:”, asegúrate de que cumples los siguientes puntos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Puedes ver todos los enlaces del menú.&lt;/li&gt;
&lt;li&gt;Todos los enlaces de la web son clicables.&lt;/li&gt;
&lt;li&gt;No hay texto que no sea visible con CSS y Javascript activados.&lt;/li&gt;
&lt;li&gt;Los enlaces más importantes están en la parte superior.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Velocidad de carga
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;El robot de Google tiene un tiempo limitado a la hora de navegar por nuestra página, cuanto menos tarde cada página en cargar a más páginas conseguirá llegar.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;También debes en cuenta que una carga de página muy lenta puede hacer que tu porcentaje de rebote se dispare, por lo que se convierte es un factor vital no solo para el posicionamiento sino también para una buena experiencia de usuario.&lt;/p&gt;

&lt;p&gt;Para ver la velocidad de carga de tu web te recomendamos &lt;a href="https://developers.google.com/speed/pagespeed/"&gt;Google Page Speed&lt;/a&gt;, allí puedes comprobar cuáles son los problemas que más ralentizan tu site además de encontrar los consejos que te ofrece Google para atajarlos. Céntrate en los que tienen prioridad alta y media.&lt;/p&gt;

&lt;h1&gt;
  
  
  Indexabilidad
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Una vez que el robot de Google ha accedido a una página el siguiente paso es que la indexe,&lt;/strong&gt; estas páginas se incluirán en un índice donde se ordenan según su contenido, su autoridad y su relevancia para que sea más sencillo y rápido para Google acceder a ellas.&lt;/p&gt;

&lt;h1&gt;
  
  
  ¿Cómo comprobar si Google ha indexado mi web correctamente?
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VQziUiFX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/30/1%2AIj1tJYW9IW4CLgI9sw4fXA.png%3Fq%3D20" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VQziUiFX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/30/1%2AIj1tJYW9IW4CLgI9sw4fXA.png%3Fq%3D20" alt="img" width="30" height="3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MSTgqFdw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/700/1%2AIj1tJYW9IW4CLgI9sw4fXA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MSTgqFdw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/700/1%2AIj1tJYW9IW4CLgI9sw4fXA.png" alt="img" width="700" height="77"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lo primero que tienes que hacer para saber si Google ha indexado tu web correctamente es &lt;strong&gt;realizar una búsqueda con el comando “site:”&lt;/strong&gt;, de este modo Google te dará la cifra aproximada de las páginas de nuestra web que tiene indexadas:&lt;/p&gt;

&lt;p&gt;Si tienes vinculado Google Webmaster Tools en tu web también puedes comprobar el número real de páginas indexadas yendo a Índice de Google &amp;gt; Estado de indexación&lt;/p&gt;

&lt;p&gt;Sabiendo (más o menos) el número exacto de páginas que tiene tu web, este dato te servirá para comparar número de páginas que tiene Google indexadas con el número de páginas reales de tu web. Pueden suceder tres escenarios:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;El número en ambos casos es muy similar.&lt;/strong&gt; Significa que todo está en orden.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;El número que aparece en la búsqueda de Google es menor&lt;/strong&gt;, lo que significa que Google no está indexando muchas de las páginas.Esto sucede porque no puede acceder a todas las páginas de la web. Para solucionar esto revisa la parte de accesibilidad de este mismo capítulo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;El número que aparece en la búsqueda de Google es mayor&lt;/strong&gt;, lo que significa que tu web tiene un problema de contenido duplicado. Seguramente la razón por la que hay más páginas indexadas de las que realmente existen en tu web es que tengas contenido duplicado o que Google está indexando páginas que no deseas que se indexen.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Contenido duplicado
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Tener&lt;/strong&gt; &lt;a href="https://www.40defiebre.com/guia-seo/diccionario-seo/contenido-duplicado/"&gt;&lt;strong&gt;contenido duplicado&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;significa que para varias URLs tenemos el mismo contenido.&lt;/strong&gt; Este es un problema muy común, que muchas veces es involuntario y que además puede acarrear efectos negativos en el posicionamiento en Google.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Estos son los principales motivos del contenido duplicado:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;“Canonicalización” de la página&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Parámetros en la URL&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Paginación&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Es el motivo más común de contenido duplicado y se produce cuando tu página de inicio tiene más de una URL:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ejemplo.com&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@isradlangel/www.ejemplo.com"&gt;www.ejemplo.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ejemplo.com/index.html&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@isradlangel/www.ejemplo.com/index.html"&gt;www.ejemplo.com/index.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cada una de las anteriores dirigen a la misma página con el mismo contenido, &lt;strong&gt;si no se le indica a Google cuál es la correcta no sabrá cuál tiene que posicionar y puede que posicione justo la versión que no se quiera.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solución. Existen 3 opciones:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Hacer una redirección en el servidor para asegurarte de que solo hay una página que se muestre a los usuarios.&lt;/li&gt;
&lt;li&gt;Definir qué subdominio queremos que sea el principal (“www” o “no-www”) en Google Webmaster Tools. &lt;a href="https://support.google.com/webmasters/bin/answer.py?hl=en&amp;amp;answer=44231"&gt;Cómo definir el subdominio principal.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Añadir una &lt;a href="https://www.40defiebre.com/guia-seo/diccionario-seo/etiqueta-canonical/"&gt;etiqueta “rel=canonical”&lt;/a&gt; en cada versión que apunte a las que se considera la correcta.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Parámetros en la URL&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Existen muchos tipos de parámetros, sobre todo en e-commerce: filtros de los productos (color, talla, puntuación, etc.), ordenación (precio menor, por relevancia, precio mayor, en cuadrícula, etc.) y sesiones de usuarios. &lt;strong&gt;El problema es que muchos de estos parámetros no cambian el contenido de la página y eso genera muchas URLs para el mismo contenido.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@isradlangel/www.ejemplo.com/boligrafos?color=negro&amp;amp;precio-desde=5&amp;amp;precio-hasta=10"&gt;www.ejemplo.com/boligrafos?color=negro&amp;amp;precio-desde=5&amp;amp;precio-hasta=10&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Es este ejemplo encontramos tres parámetros: color, precio mínimo y precio máximo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solución&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Añade una etiqueta “rel=canonical” hacia la página original, así evitarás cualquier tipo de confusión por parte de Google con la página original.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Otra posible solución es&lt;/strong&gt; indicar a través de Google Webmaster Tools &amp;gt; Rastreo &amp;gt; Parámetros de URL qué parámetros debe ignorar Google a la hora de indexar las páginas de una web.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Paginación&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cuando un artículo, lista de productos o páginas de etiquetas y categorías tienen más de una página, pueden aparecer problemas de contenido duplicado aunque las páginas tengan contenido diferente, porque todas están centradas en el mismo tema. Esto es un problema enorme en las páginas de e-commerce donde existen cientos de artículos en la misma categoría.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solución&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Actualmente las etiquetas rel=next y rel=prev permiten a los motores de búsqueda saber qué páginas pertenecen a una misma categoría/publicación y así es posible centrar todo el potencial de posicionamiento en la primera página.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cómo usar los parámetros NEXT y PREV&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;\1. Añadir la etiqueta rel=next en la parte de del código a la primera página:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;link rel=”next” href=”&lt;a href="http://www.ejemplo.com/page-2.html%E2%80%9D"&gt;http://www.ejemplo.com/page-2.html”&lt;/a&gt; /&amp;gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;\2. Añadir en todas las páginas menos la primera y la última las etiquetas rel=next y rel=prev&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;link rel=”prev” href=”&lt;a href="http://www.ejemplo.com/page-1.html%E2%80%9D"&gt;http://www.ejemplo.com/page-1.html”&lt;/a&gt; /&amp;gt;&lt;/li&gt;
&lt;li&gt;link rel=”next” href=”&lt;a href="http://www.ejemplo.com/page-3.html%E2%80%9D"&gt;http://www.ejemplo.com/page-3.html”&lt;/a&gt; /&amp;gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;\3. Añadir a la última página la etiqueta rel=prev&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;link rel=”prev” href=”&lt;a href="http://www.ejemplo.com/page-4.html%E2%80%9D"&gt;http://www.ejemplo.com/page-4.html”&lt;/a&gt; /&amp;gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Otra solución es&lt;/strong&gt; buscar el parámetro de paginación en la URL e introducirlo en Google Webmaster Tools para que no se indexe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Canibalización
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;La canibalización de keywords ocurre cuando en una web hay varias páginas que compiten por las mismas palabras clave.&lt;/strong&gt; Esto confunde al motor de búsqueda al no saber cuál es la más relevante para esa palabra clave.&lt;/p&gt;

&lt;p&gt;Este problema es muy común en los e-commerce, porque al tener varias versiones de un mismo producto “atacan” con todas ellas a las mismas keywords. Por ejemplo, si se vende un libro en versión tapa blanda, tapa dura y versión digital, se tendrán 3 páginas con prácticamente el mismo contenido.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solución&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Crear una página principal del producto, desde donde se acceda a las páginas de los diferentes formatos, en las que incluiremos una &lt;a href="https://support.google.com/webmasters/answer/139394?hl=es"&gt;etiqueta canonical&lt;/a&gt; que apunte a dicha página principal. Lo óptimo siempre será centrar cada keyword en una sola página para evitar cualquier problema de canibalización.&lt;/p&gt;

&lt;h1&gt;
  
  
  3. Contenido
&lt;/h1&gt;

&lt;p&gt;Ya que en los últimos años ha quedado bastante claro que el contenido es el rey para Google. Ofrezcámosle un buen trono entonces.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;El contenido es la parte más importante de una web y por mucho que esté bien optimizada a nivel SEO, si no es relevante con respecto a las búsquedas que realizan los usuarios nunca va a aparecer en las primeras posiciones.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para hacer un buen análisis del contenido de nuestra web tienes unas cuantas herramientas a tu disposición, pero al final lo más útil es usar la página con el Javascript y los CSS desactivados cómo explicamos anteriormente. &lt;strong&gt;De este modo verás qué contenido está leyendo Google realmente y en qué orden está dispuesto.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A la hora de analizar el contenido de las páginas debes hacerte varias preguntas que te guiarán en el proceso:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;¿La página tiene suficiente contenido?&lt;/strong&gt; No hay una medida estándar de cuánto es “suficiente”, pero al menos debería contener 300 palabras.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;¿El contenido es relevante?&lt;/strong&gt; Debe ser útil para el lector, basta con preguntarte a ti mismo si tú leerías eso. Sé sincero.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;¿Tiene keywords importantes en los primeros párrafos?&lt;/strong&gt; Además de estas deberemos usar términos relacionados porque Google es muy eficaz relacionando términos.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Una página nunca va a posicionar por algo que no contenga&lt;/em&gt; &lt;a href="https://twitter.com/share?text=Una+p%C3%A1gina+nunca+va+a+posicionar+por+algo+que+no+contenga&amp;amp;url=https://www.40defiebre.com/guia-seo/como-hacer-web-optimizada-seo&amp;amp;via=socialmood"&gt;&lt;em&gt;TUITEA ESTO&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;¿Tiene&lt;/strong&gt; &lt;a href="https://www.40defiebre.com/guia-seo/diccionario-seo/keyword-stuffing/"&gt;&lt;strong&gt;keyword stuffing&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;?&lt;/strong&gt; Si el contenido de la página “peca” de exceso de keywords a Google no le hará ninguna gracia. No hay un número exacto que defina una &lt;a href="https://www.40defiebre.com/guia-seo/diccionario-seo/densidad-de-keywords/"&gt;densidad de palabras&lt;/a&gt; clave perfecta, pero Google aconseja ser lo más natural posible.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿Tiene faltas de ortografía?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;¿Es fácil de leer?&lt;/strong&gt; Si no se nos hace tediosa la lectura, estará bien. Los párrafos no deben ser muy largos, la letra no debe tener un tamaño demasiado pequeño y es recomendable que haya imágenes o vídeos que refuercen el texto. Acuérdate de pensar siempre para qué público escribes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;¿Google puede leer el texto de la página?&lt;/strong&gt; Tenemos que evitar que el texto esté dentro de Flash, imágenes o Javascript. Esto lo comprobaremos viendo la versión de solo texto de nuestra página, usando en Google el comando cache:&lt;a href="http://www"&gt;www&lt;/a&gt;. ejemplo.com y seleccionando esta versión.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;¿El contenido está bien distribuido?&lt;/strong&gt; Tiene sus etiquetas H1, H2 etcétera correspondientes, las imágenes están bien maquetadas etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;¿Es enlazable?&lt;/strong&gt; si no le facilitamos al usuario cómo compartirlo es muy probable que no lo haga. Incluye botones de compartir en redes sociales en lugares visibles de la página que no estorben la visualización del contenido, ya sea un vídeo, una foto o texto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;¿Es actual?&lt;/strong&gt; cuanto más actualizado esté tu contenido mayor será la frecuencia de rastreo de Google en tu web y mejor será la experiencia del usuario.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Consejo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Puedes crear un excel con todas las páginas, sus textos y las keywords que quieres que aparezcan en ellos, de esta manera te será más fácil ver dónde debes reducir o aumentar el número de keywords en cada página.&lt;/p&gt;

&lt;h1&gt;
  
  
  4. Meta etiquetas
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Las&lt;/strong&gt; &lt;a href="https://www.40defiebre.com/guia-seo/diccionario-seo/meta-tags/"&gt;&lt;strong&gt;meta etiquetas o meta tags&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;se utilizan para transmitir información a los buscadores sobre qué trata una página&lt;/strong&gt; cuando estos tienen que ordenar y mostrar sus resultados. Estas son las etiquetas más importantes que debemos tener en cuenta:&lt;/p&gt;

&lt;h1&gt;
  
  
  Title
&lt;/h1&gt;

&lt;p&gt;La etiqueta title es el elemento más importante dentro de las meta-etiquetas. Es lo primero que aparece en los resultados en Google.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A la hora de optimizar el title hay que tener en cuenta que:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;La etiqueta debe estar en la sección   del código.&lt;/li&gt;
&lt;li&gt;Cada página ha de tener un título único.&lt;/li&gt;
&lt;li&gt;No debe de exceder los 70 caracteres, si no aparecerá cortado.&lt;/li&gt;
&lt;li&gt;Debe de ser descriptivo con respecto al contenido de la página.&lt;/li&gt;
&lt;li&gt;Debe contener la keyword para la que estemos optimizando la página.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Nunca debemos abusar de las keywords en el título&lt;/strong&gt;, esto hará que los usuarios desconfíen y que Google piense que estamos intentando engañarle.&lt;/p&gt;

&lt;p&gt;Otro aspecto a tener en cuenta es dónde poner la “marca”, es decir: el nombre de la web, por lo general se suele poner al final para dar más importancia a las keywords, separando estas del nombre de la web con un guión o una barra vertical.&lt;/p&gt;

&lt;h1&gt;
  
  
  Meta-description
&lt;/h1&gt;

&lt;p&gt;Aunque no es un factor crítico en el posicionamiento de una web afecta de manera considerable a la tasa de clics (click-through rate) en los resultados de búsqueda.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Para la meta-description seguiremos los mismos principios que con el title, solo que su longitud no debe de exceder los 155 caracteres.&lt;/strong&gt; Tanto para los titles como para las meta-descriptions debemos de evitar la duplicidad, esto lo podremos comprobar en Google Webmaster Tools &amp;gt; Aspecto de la búsqueda &amp;gt; Mejoras HTML.&lt;/p&gt;

&lt;h1&gt;
  
  
  Meta Keywords
&lt;/h1&gt;

&lt;p&gt;En su momento las meta keywords fueron un factor muy importante de posicionamiento, pero Google descubrió lo fácil que es manipular los resultados de búsqueda así que lo eliminó como factor de posicionamiento.&lt;/p&gt;

&lt;h1&gt;
  
  
  Etiquetas H1, H2, H3…
&lt;/h1&gt;

&lt;p&gt;Las etiquetas H1, H2, etc. son muy importantes para tener una buena estructura de información y una buena experiencia de usuario, ya que &lt;strong&gt;definen la jerarquía del contenido,&lt;/strong&gt; algo que mejorará el SEO. Debemos darle importancia al H1 porque normalmente está en la parte más alta del contenido y cuanto más arriba esté una keyword más importancia le dará Google.&lt;/p&gt;

&lt;h1&gt;
  
  
  Etiqueta “alt” en la imagen
&lt;/h1&gt;

&lt;p&gt;La etiqueta “alt” en las imágenes se añade directamente en el propio código de la imagen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;img src=”&lt;a href="http://www.ejemplo.com/ejemplo.jpg%E2%80%9D"&gt;http://www.ejemplo.com/ejemplo.jpg”&lt;/a&gt; alt=”keyword molona” &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Esta etiqueta tiene que ser descriptiva con respecto a la imagen y contenido de dicha imagen&lt;/strong&gt;, ya que es lo que lee Google al rastrearla y uno de los factores que utiliza para posicionarla en Google Imágenes.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusión
&lt;/h1&gt;

&lt;p&gt;Ya sabes cómo hacer una página optimizada para SEO y que existen muchos factores que optimizar si quieres aparecer en las mejores posiciones de los resultados de búsqueda.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>design</category>
    </item>
    <item>
      <title>Cómo funciona el scope de JavaScript con las variables var, let y const — en 10 minutos</title>
      <dc:creator>Israel Del Angel</dc:creator>
      <pubDate>Tue, 29 Oct 2019 20:59:12 +0000</pubDate>
      <link>https://dev.to/thelordofth3cloud/como-funciona-el-scope-de-javascript-con-las-variables-var-let-y-const-en-10-minutos-4009</link>
      <guid>https://dev.to/thelordofth3cloud/como-funciona-el-scope-de-javascript-con-las-variables-var-let-y-const-en-10-minutos-4009</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F0%2AABaubFNk3u_frni3" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F0%2AABaubFNk3u_frni3" alt="img"&gt;&lt;/a&gt;Photo by &lt;a href="https://unsplash.com/@cebbbinghaus?utm_source=medium&amp;amp;utm_medium=referral" rel="noopener noreferrer"&gt;Christopher Robin Ebbinghaus&lt;/a&gt; on &lt;a href="https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  En este post aprenderás cómo funciona el alcance con las variables “global scope”, “funciones”, “var”, “let”, “const”. Qué puedes hacer con él y por qué es importante aprender este concepto.
&lt;/h3&gt;

&lt;h4&gt;
  
  
  TLDR
&lt;/h4&gt;

&lt;p&gt;Para aquellos que no les gusta leer, usa esta lista cuando dudes de cuál elegir. Si desea aprender este tema en detalle, te recomiendo que te desplaces hacia abajo.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;const&lt;/code&gt;: intenta usar esta variable &lt;code&gt;const&lt;/code&gt; en todas partes y siempre. Excepto si la variable necesita ser cambiada.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;let&lt;/code&gt;: Si el valor de la variable necesita ser cambiado, usa la variable &lt;code&gt;let&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;var&lt;/code&gt;: evita esta variable, puede hacer que tu aplicación sea desordenada e impredecible porque puede sobrescribirse desde cualquier lugar. &lt;code&gt;let&lt;/code&gt; y &lt;code&gt;const&lt;/code&gt; evitan esto por defecto 👍&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Tipos de Scopes
&lt;/h4&gt;

&lt;p&gt;¿Cuál es el alcance? Una función se utiliza para crear un ámbito que decide la accesibilidad y la visibilidad de variables, funciones y objetos.&lt;/p&gt;

&lt;p&gt;En JavaScript, tenemos 2 tipos de ámbitos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scope global&lt;/li&gt;
&lt;li&gt;Scope local&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cual es el global scope&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El alcance global es el objeto &lt;code&gt;window&lt;/code&gt;. Que es accesible desde todas partes en tu aplicación. Si deseas que una variable, función u objeto sea visible para todos los demás ámbitos que no sea ponerlo en el ámbito global.&lt;/p&gt;

&lt;p&gt;Pero ten en cuenta no poner todo en el ámbito global. El objeto &lt;code&gt;window&lt;/code&gt; ya está lleno de mucha información. Entonces, si no lo necesitas en todas partes, colócalo en un ámbito local.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cual es el local scope&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Un ámbito local es creado por una función. Esa función puede hacer que las variables, los objetos y las funciones internas se oculten o sean visibles desde fuera de la función.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Como crear un scope&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para crear un ámbito solo necesitas una función. Donde puedes poner variables, funciones y objetos que luego no son accesibles fuera de la función. La única forma de hacerlo visible y accesible es devolviéndoles la declaración &lt;code&gt;return&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  La variable “var”
&lt;/h4&gt;

&lt;p&gt;La palabra clave &lt;code&gt;var&lt;/code&gt; se puede usar en todas partes. Puede contener cadenas, int, objeto, matriz, función.&lt;/p&gt;

&lt;p&gt;Las variables se pueden usar para todo, pero también en todas partes. ¡Puedes acceder a una &lt;code&gt;var&lt;/code&gt; desde dentro de una función, objeto, instrucción if-else, realmente en todas partes!&lt;/p&gt;

&lt;p&gt;Eso puede sonar genial, pero puede tener un gran efecto en la previsibilidad de un sitio web o aplicación web.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Alcance global&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Una &lt;code&gt;var&lt;/code&gt; tiene o puede tener un alcance global. ¡Genial para acceder a todo desde cualquier cosa! Pero eso es bueno? Hay algunas alternativas por delante. Se llaman &lt;code&gt;let&lt;/code&gt; y &lt;code&gt;const&lt;/code&gt; y tienen un comportamiento diferente al de las &lt;code&gt;var&lt;/code&gt;. Pero hablemos de eso más tarde.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“var” se puede cambiar más tarde&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Una variable se puede definir con una cadena, más tarde, reasignada a un entero y más tarde podría ser una función. Ese es el poder pero también una debilidad.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var globalVariableglobalVariable = 'I Love Pizza!'console.log(globalVariable) // Will be 'I Love Pizza!'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora definí una variable global (sí, me encanta la pizza :-)), justo después le agregué una cadena. Para que pueda ver, puede definirlo y luego cambiarlo al otro valor.&lt;/p&gt;

&lt;p&gt;Entonces, adivina qué, &lt;code&gt;globalVariable&lt;/code&gt; ha cambiado. Suena bien verdad! Bueno, si pretendías cambiarlo, ¡sí! Pero si no sabía que ya usaba esa variable, ¡entonces es un problema! &lt;strong&gt;¡Ahí está la debilidad!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Puede tener alcance local&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;;(function() {  var var1 = 'variable 1 value in parent scope'  ;(function() {    // Scope 1    var1 = 'variable 1 value in scope 1'    console.log('scope 1: ', var1) // Is 'variable 1 value in scope 1'  })()  ;(function() {    // Scope 2    var1 = 'variable 1 value in scope 2'    console.log('scope 2: ', var1) // Is 'variable 1 value in scope 2'  })()  console.log('Parent scope: ', var1) // Is 'variable 1 value in parent scope'})() console.log('Global scope: ', var1) // Is undefined
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Puede hacer que la variable tenga ámbito local, poniéndola dentro de una función. ¡Como en el ejemplo aquí, si ejecuta la función en su consola, el último &lt;code&gt;console.log ()&lt;/code&gt; con "Alcance principal" en él, será cambiado por el anterior!&lt;/p&gt;

&lt;h4&gt;
  
  
  La variable “let”
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;“let” tiene un alcance de bloque&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Una variable &lt;code&gt;let&lt;/code&gt; tiene un ámbito de bloque. Puede crear un alcance con cualquier &lt;code&gt;{}&lt;/code&gt;. Con una función, for and while loop y mucho más.&lt;/p&gt;

&lt;p&gt;Finalmente, un tipo de variable que no tiene alcance global sino local. 🎉&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“let” se puede cambiar más tarde&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Una variable &lt;code&gt;let&lt;/code&gt; se puede cambiar más tarde, ¡pero solo si está en el mismo alcance que donde se declara! Se declara en el otro ámbito, es solo una nueva variable que se define.&lt;/p&gt;

&lt;p&gt;Este ejemplo se ejecutará en la última versión de Google Chrome&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;;(function() {  let letVar1 = 'Let variable 1 value in parent scope'  ;(function() {    // Scope 1    let letVar1 = 'Let variable 1 value in scope 1'    console.log('scope 1: ', letVar1) // Is 'Let variable 1 value  in scope 1'  })()  ;(function() {    // Scope 2    let letVar1 = 'Let variable 1 value in scope 2'    console.log('scope 2: ', letVar1) // Is 'Let variable 1 value in scope 2'  })()  console.log('Parent scope: ', letVar1) // Is 'Let variable 1    value in parent scope'})()console.log('Global scope: ', letVar1) // Is undefined
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si trataste de pegar este fragmento en la consola de herramientas de desarrollo, verás que el alcance principal, el alcance 1 y 2 dan valores diferentes. Eso es porque tiene un alcance de bloque. El alcance global dará un error de que no está definido.&lt;/p&gt;

&lt;p&gt;Con la &lt;code&gt;var&lt;/code&gt; normal, puedes darle a &lt;code&gt;letVar1&lt;/code&gt; un nuevo valor. Pero dado que un &lt;code&gt;let&lt;/code&gt; no se puede redefinir más tarde, esto no es posible para el &lt;code&gt;let&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Si nos olvidamos de asignar &lt;code&gt;letVar1&lt;/code&gt; en el alcance 1, entonces la consola en el alcance 1 generará "Dejar el valor de la variable 1 en el alcance primario". Porque buscará en el ámbito primario.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“let” no se puede levantar&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Si intenta elevar las variables &lt;code&gt;let&lt;/code&gt;, obtendrá errores. Para definir un &lt;code&gt;let&lt;/code&gt; y darle un valor. Si primero trata de definirlo y le da un valor más tarde, ¡terminará con errores!&lt;/p&gt;

&lt;h4&gt;
  
  
  La variable “const”
&lt;/h4&gt;

&lt;p&gt;Lo que lees sobre &lt;code&gt;const&lt;/code&gt; es que son inmutables. La mayoría de la gente piensa que significa que no puede cambiar el valor, sino que puede cambiar el valor. Pero no puede reasignar la referencia al &lt;code&gt;const&lt;/code&gt; en sí.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“const” tiene un alcance de bloque&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const&lt;/code&gt; tiene un alcance de bloque, igual que la variable &lt;code&gt;let&lt;/code&gt;. En el otro ámbito, puede definir el &lt;code&gt;const&lt;/code&gt; nuevamente. Pero no puede reasignar la misma constante en el otro ámbito.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;;(function() {  const constVar1 = 'const variable 1 value in parent scope'  ;(function() {    // Scope 1    const constVar1 = 'const variable 1 value in scope 1'    console.log('scope 1: ', constVar1)    // scope 1:  const variable 1 value in scope 1  })()  console.log('Parent scope: ', constVar1)  // Parent scope:  const variable 1 value in parent scope})()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En este ejemplo, puedes ver que es posible asignar una constante con el mismo nombre en un ámbito diferente con el otro valor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“const” no se puede reasignar&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;;(function() {  const constVar1 = 'const variable 1 value in parent scope'  ;(function() {    // Scope 1    console.log('scope 1: ', constVar1)    // scope 1:  const variable 1 value in parent scope    constVar1 = 'const variable 1 value in scope 1'    // Is Identifier 'constVar1' has already been declared    console.log('scope 1: ', constVar1)  })()})()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En este ejemplo, puede ver que no es posible reasignar la misma constante con un valor diferente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“const” no se puede levantar&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Debido a que no puede reasignar una constante, sabe que no es posible levantarlas. Para levantarlas, debe reasignar.&lt;/p&gt;

&lt;h4&gt;
  
  
  ¡Buena suerte!
&lt;/h4&gt;

&lt;p&gt;Si estás aprendiendo JavaScript en este momento, me imagino que&lt;/p&gt;

&lt;p&gt;Si algo no es claro o confuso sobre &lt;code&gt;var&lt;/code&gt;, &lt;code&gt;let&lt;/code&gt; o &lt;code&gt;const&lt;/code&gt;, por favor deja tus preguntas en los comentarios.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Trucos para que codifiques cuando no estas motivado</title>
      <dc:creator>Israel Del Angel</dc:creator>
      <pubDate>Mon, 28 Oct 2019 14:29:34 +0000</pubDate>
      <link>https://dev.to/thelordofth3cloud/trucos-para-que-codifiques-cuando-no-estas-motivado-54e2</link>
      <guid>https://dev.to/thelordofth3cloud/trucos-para-que-codifiques-cuando-no-estas-motivado-54e2</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F3996%2F0%2AcTkah-SoR1-Peo3T" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F3996%2F0%2AcTkah-SoR1-Peo3T" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@arifriyanto?utm_source=medium&amp;amp;utm_medium=referral" rel="noopener noreferrer"&gt;Arif Riyanto&lt;/a&gt; on &lt;a href="https://unsplash.com/?utm_source=medium&amp;amp;utm_medium=referral" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Todos tienen una pasión por algo, para algunas personas su música, otras podrían estar jugando videojuegos y para algunas, podría ser el amor por resolver problemas con el código. La programación es difícil, lo que hace que valga la pena es la pasión que tenemos por resolver problemas.&lt;/p&gt;

&lt;p&gt;¿Qué pasa si perdemos esa pasión? 🤔&lt;/p&gt;

&lt;p&gt;Hace unos años, perdí de vista por qué comencé a codificar y descubrí que a menudo me obligaba a intentar codificar. Después de observarme, encontré algunos métodos que utilicé para reavivar mi pasión y volver a codificar.&lt;/p&gt;

&lt;p&gt;Esos métodos son lo que estoy a punto de compartir con ustedes en este momento.&lt;/p&gt;

&lt;h1&gt;
  
  
  Mis trucos
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Reflexionando sobre tus objetivos&lt;/li&gt;
&lt;li&gt;Asistir a un Meetup🗣&lt;/li&gt;
&lt;li&gt;Viendo una película🍿&lt;/li&gt;
&lt;li&gt;Unirse a una comunidad 👥&lt;/li&gt;
&lt;li&gt;Viendo anime&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Reflexionando sobre tus objetivos
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;**Los sueños son pequeños empujones de tu alma — Victoria Moran*&lt;/em&gt;*&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;En primer lugar, todos tienen una razón particular por la que entraron en la programación ( &lt;em&gt;y sí, incluso aquellos que lo hacen por dinero 😏&lt;/em&gt; ). La mejor manera de reavivar su motivación y comenzar a codificar una vez más es simplemente reflexionar sobre los objetivos que tenía mientras se aventuraba en la programación.&lt;/p&gt;

&lt;p&gt;Podría ser &lt;strong&gt;comenzar a ganar $ 250k / año&lt;/strong&gt; en un trabajo, podría estar &lt;strong&gt;resolviendo un problema agonizante&lt;/strong&gt; en su comunidad local, incluso podría estar &lt;strong&gt;trabajando para una de las compañías de tecnología más grandes que existen&lt;/strong&gt; ( &lt;em&gt;sí, te veo en Google&lt;/em&gt; ).&lt;/p&gt;

&lt;p&gt;Sea lo que sea, reflexione y recuerde por qué comenzó a codificar en primer lugar.&lt;/p&gt;




&lt;h1&gt;
  
  
  Asistir a un Meetup
&lt;/h1&gt;

&lt;p&gt;Otra forma de motivarse para codificar nuevamente sería asistir a reuniones. Los Meetups son una forma encantadora de volver a motivarte mientras conoces e interactúas con otros desarrolladores que han diseñado y creado aplicaciones increíbles. Algunos incluso van tan lejos como para darle consejos de carrera y caminos a seguir como desarrollador.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.meetup.com/" rel="noopener noreferrer"&gt;Meetup&lt;/a&gt; es una plataforma fácil y directa para comenzar a buscar reuniones para asistir. Crea una cuenta en Meetup y, en cuestión de segundos, recibirás muchas sugerencias interesantes sobre varias reuniones futuras.&lt;/p&gt;




&lt;h1&gt;
  
  
  Viendo una película
&lt;/h1&gt;

&lt;p&gt;Las películas son una excelente manera de pasar el tiempo o relajarse después de un largo día ( &lt;em&gt;especialmente a través de Netflix&lt;/em&gt; ). Por lo tanto, parecería extraño pensar que en realidad podría motivarse para codificar mientras mira una película. Bueno, todo depende del tipo de película que veas.&lt;/p&gt;

&lt;p&gt;Hay muchas películas y series que podrían ayudar a motivar a un desarrollador a codificar, Silicon Valley, Mr. Robot, solo por nombrar algunas. Para mantener este artículo lo más breve posible, escribíre otro artículo sobre las peliculas y series para motivarte a seguir codificando.&lt;/p&gt;




&lt;h1&gt;
  
  
  Unirse a una comunidad
&lt;/h1&gt;

&lt;p&gt;Una comunidad es una forma sencilla de conectarse con sus compañeros o desarrolladores con más experiencia que usted que antes había estado en su lugar.&lt;/p&gt;

&lt;p&gt;Al igual que asistir a una reunión, cuando te encuentras en una comunidad de desarrolladores experimentados, puedes aprender de primera mano sobre algunas tecnologías y proyectos increíbles en los que la mayoría de ellos trabajan a diario.&lt;/p&gt;

&lt;p&gt;Leer sobre otras personas con experiencias similares, que pueden estar luchando con los mismos problemas que usted, puede ser muy alentador y motivador.&lt;/p&gt;




&lt;h1&gt;
  
  
  Mirando anime
&lt;/h1&gt;

&lt;p&gt;Ahora, este es el más tonto de todos y es por eso que lo dejé último. Solo escúchame por un segundo ( &lt;em&gt;recuerda que dije “&lt;/em&gt; &lt;em&gt;**trucos que uso*&lt;/em&gt;* &lt;em&gt;“&lt;/em&gt; ).&lt;/p&gt;

&lt;p&gt;Ver a las personas de otros lograr sus objetivos es una forma segura de obtener o reavivar su motivación. El anime japonés está lleno de situaciones como esta.&lt;/p&gt;

&lt;p&gt;Ves al protagonista peleando con todo lo que tiene hasta su último aliento hasta alcanzar su objetivo. Ese tipo de determinación generalmente alimenta mi motivación y me hace recordar mis objetivos y todo lo que dije que lograría y esos pensamientos me vuelven a codificar.&lt;/p&gt;

&lt;p&gt;Sé que suena tonto 😂, pero te digo que en realidad funciona para mí.&lt;/p&gt;




&lt;h1&gt;
  
  
  CONCLUSIÓN
&lt;/h1&gt;

&lt;p&gt;Así que sí, esos fueron algunos de los trucos que utilizo para volver a codificar.&lt;/p&gt;

&lt;p&gt;Tenga algo que ya haga, comparta en los comentarios a continuación. Con ganas de descubrir nuevos trucos.&lt;/p&gt;

</description>
      <category>motivation</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Front-end Developer CV</title>
      <dc:creator>Israel Del Angel</dc:creator>
      <pubDate>Mon, 28 Oct 2019 03:02:12 +0000</pubDate>
      <link>https://dev.to/thelordofth3cloud/front-end-developer-cv-2d40</link>
      <guid>https://dev.to/thelordofth3cloud/front-end-developer-cv-2d40</guid>
      <description>&lt;p&gt;I love Programming ♥ :)&lt;/p&gt;

&lt;p&gt;ty for view, please click like :)&lt;/p&gt;

&lt;p&gt;//&lt;a href="mailto:israplenitud@gmail.com"&gt;israplenitud@gmail.com&lt;/a&gt; 
//&lt;a href="https://isra.netlify.com/"&gt;https://isra.netlify.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/isradlangel/embed/boBEPB?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>codepen</category>
    </item>
    <item>
      <title>Automatizar un blog de Gatsby con GitHub y Buddy</title>
      <dc:creator>Israel Del Angel</dc:creator>
      <pubDate>Sun, 27 Oct 2019 22:12:37 +0000</pubDate>
      <link>https://dev.to/thelordofth3cloud/automatizar-un-blog-de-gatsby-con-github-y-buddy-3da3</link>
      <guid>https://dev.to/thelordofth3cloud/automatizar-un-blog-de-gatsby-con-github-y-buddy-3da3</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/@isradlangel?source=post_page-----fb465e6fb8ca----------------------" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Ffit%2Fc%2F48%2F48%2F2%2AqS15X9GwvewoVN3RP1n8pw.png" alt="Israel Del Angel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F30%2F1%2At5vsnnZ12RU3iPFbEmaWxQ.png%3Fq%3D20" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F30%2F1%2At5vsnnZ12RU3iPFbEmaWxQ.png%3Fq%3D20" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1800%2F1%2At5vsnnZ12RU3iPFbEmaWxQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1800%2F1%2At5vsnnZ12RU3iPFbEmaWxQ.png" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El lanzamiento de un blog o sitio web exitoso significa que su servidor necesitará poder manejar el tráfico que aumentará rápidamente en los próximos meses. Una campaña publicitaria efectiva o una asociación con un distribuidor de contenido puede generar fácilmente 10 veces más tráfico en un período de tiempo muy corto.&lt;/p&gt;

&lt;p&gt;En este artículo, aprenderá cómo crear y ejecutar un sitio web estático capaz de manejar grandes cantidades de tráfico sin requerir una infraestructura de alojamiento costosa y compleja. Utilizaremos Gatsby, un generador de sitios web estáticos, y Buddy, una plataforma de integración y despliegue continuo. También le mostraré un flujo de trabajo efectivo para publicar nuevas publicaciones y actualizar las existentes utilizando un repositorio de GitHub.&lt;/p&gt;

&lt;p&gt;Antes de comenzar, me gustaría que les muestre un gran ejemplo, &lt;a href="https://www.eviemagazine.com/" rel="noopener noreferrer"&gt;Evie Magazine&lt;/a&gt;. Funciona con la misma tecnología que te voy a enseñar. Tome nota de la rapidez y capacidad de respuesta del sitio al hacer clic en los enlaces.&lt;/p&gt;

&lt;p&gt;Veamos ahora qué hay de malo con los sistemas de administración de contenido:&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Por qué no deberías usar el sistema de gestión de contenido&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;La forma más popular de crear sitios web es usar WordPress o un sistema de administración de contenido alternativo como Drupal y Joomla. Todos funcionan con la misma tecnología: PHP y MySQL Database. Un CMS es ideal para usuarios no técnicos que buscan comenzar a ejecutar su propio sitio web. Es fácil de usar y requiere poca experiencia técnica para publicar contenido con él. Sin embargo, cuando el tráfico comienza a ser masivo, la administración del sitio rápidamente se sale de control.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F30%2F1%2ArJ81RnEpFBW3lSVgBh9PCg.png%3Fq%3D20" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F30%2F1%2ArJ81RnEpFBW3lSVgBh9PCg.png%3Fq%3D20" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F826%2F1%2ArJ81RnEpFBW3lSVgBh9PCg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F826%2F1%2ArJ81RnEpFBW3lSVgBh9PCg.png" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;**El primer problema es el rendimiento*&lt;/em&gt;*. Para cada solicitud que realiza un visitante, se requieren dos programas de servidor (servidor PHP y base de datos MySQL) para procesar la solicitud. Bajo tráfico normal, esto generalmente demora unos segundos en procesarse. Sin embargo, si el sitio web está muy diseñado y cargado con complementos, puede llevar más tiempo. El problema empeora con el alto tráfico ya que los programas del servidor luchan por procesar cada solicitud a tiempo.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;**El segundo problema es la seguridad*&lt;/em&gt;*. Tómese un minuto y visite &lt;a href="https://www.cvedetails.com/" rel="noopener noreferrer"&gt;CVEDetails&lt;/a&gt;. Este es un sitio web de seguridad en línea que enumera las vulnerabilidades descubiertas en todo tipo de software. Te sorprenderá ver la cantidad de vulnerabilidades encontradas en las bases de datos PHP y SQL. Para empeorar las cosas, hay cientos de tutoriales que puedes encontrar en línea que enseñan a los usuarios diferentes técnicas para hackear un sitio web de WordPress. Las instrucciones son fáciles de seguir y hasta un niño de 12 años puede hacerlo.&lt;/p&gt;

&lt;p&gt;Afortunadamente, existen soluciones y soluciones a todos estos problemas. Desafortunadamente, algunos de ellos implican mucho tiempo y dinero para implementar. Gastar dinero no es un gran problema si puede resolver un problema rápidamente. Pero pasar tiempo en el mismo problema todo el tiempo afectará seriamente la productividad.&lt;/p&gt;

&lt;p&gt;Estoy seguro de que, como la mayoría de las personas, querrás pasar más tiempo produciendo contenido y no lidiar con problemas de alojamiento y seguridad. Para saber cómo puede lograr eso, eche un vistazo a la siguiente sección.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Presentación de Gatsby — Generador de sitios web estáticos&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Gatsby es un generador de sitio estático gratuito de código abierto basado en React. Genera archivos HTML estáticos utilizando datos procedentes de archivos de descuento, sistemas de gestión de contenido o una API personalizada. A continuación se muestra una ilustración de la configuración:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F30%2F1%2ASQwc5eswgVHbHV-aKEhhUg.png%3Fq%3D20" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F30%2F1%2ASQwc5eswgVHbHV-aKEhhUg.png%3Fq%3D20" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F827%2F1%2ASQwc5eswgVHbHV-aKEhhUg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F827%2F1%2ASQwc5eswgVHbHV-aKEhhUg.png" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En este ejemplo, los artículos se escriben como archivos de descuento y se guardan en un repositorio privado. Un sistema de implementación continua selecciona automáticamente los artículos de rebajas enviados y utiliza Gatsby para convertirlos en páginas web estáticas que luego se implementan en un servidor web. Los visitantes simplemente cargan estas páginas web estáticas mientras navegan por el sitio web.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;**La primera ventaja*&lt;/em&gt;* para los sitios web estáticos ** es que &lt;em&gt;**la carga de la página se produce instantáneamente*&lt;/em&gt;* ya que no se realiza ningún procesamiento en el servidor. Por lo tanto, un solo servidor es capaz de atender más solicitudes por segundo que un servidor PHP que utiliza los mismos recursos de CPU y memoria. Los sitios web estáticos también son mucho más fáciles de escalar, ya que no hay una base de datos involucrada.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;**La segunda ventaja*&lt;/em&gt;* para los sitios web estáticos es la &lt;em&gt;**seguridad*&lt;/em&gt;*. No hay ningún complemento, código de servidor o base de datos para explotar en el servidor web público. Tampoco hay credenciales o información confidencial almacenada en el sitio web estático. Esto elimina efectivamente el incentivo para que un hacker busque formas de entrometerse en su sitio web. Además, ya no tiene que perder tiempo tratando con parches de software o resolviendo problemas de seguridad y rendimiento.&lt;/p&gt;

&lt;p&gt;Hay muchos más beneficios que no he mencionado. Creo que he dicho lo suficiente para garantizar su atención. En las secciones siguientes, le mostraré cómo configurar su sitio web estático usando &lt;em&gt;**Gatsby*&lt;/em&gt;&lt;em&gt;, *&lt;/em&gt;&lt;em&gt;GitHub*&lt;/em&gt;* y &lt;a href="https://www.buddy.works/?utm_source=aligator_gatsbybuddy&amp;amp;utm_medium=cpcl&amp;amp;utm_campaign=bz_alligator_art1019&amp;amp;utm_content=gadsby_mw" rel="noopener noreferrer"&gt;&lt;em&gt;**Buddy*&lt;/em&gt;*&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Prepare un sitio de alojamiento&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Lo primero que deberá hacer es configurar una ubicación en línea para implementar su sitio web estático. Hay tantos servicios en línea que le permiten hacer esto, como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon S3&lt;/li&gt;
&lt;li&gt;AWS Amplify&lt;/li&gt;
&lt;li&gt;Firebase&lt;/li&gt;
&lt;li&gt;CloudFront&lt;/li&gt;
&lt;li&gt;Now&lt;/li&gt;
&lt;li&gt;Surge&lt;/li&gt;
&lt;li&gt;GitHub Pages&lt;/li&gt;
&lt;li&gt;Heroku&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;También puede implementar en un sitio de alojamiento web compartido que es lo que usaremos para este tutorial. Prefiero alojamiento compartido ya que obtienes acceso a más valor por tu dinero, p. alojamiento de correo electrónico, FTP, SSH, gestión de dominio, SSL gratis e.t.c. Usaré una cuenta que poseo con &lt;a href="https://www.fastcomet.com/" rel="noopener noreferrer"&gt;FastComet&lt;/a&gt;. Cualquier empresa de hosting que le brinde acceso a CPanel lo hará. Si no tiene uno, puede obtener un servicio de alojamiento web gratuito con acceso a CPanel en &lt;a href="https://www.freehosting.com/free-hosting.html" rel="noopener noreferrer"&gt;Free Hosting&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Una vez que haya iniciado sesión en su cuenta y ya tenga un nombre de dominio que puede usar. Realice los siguientes pasos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Crear un subdominio, gatsby.example.com. (En este caso usaremos gatsby.wallesdevelopers.com)&lt;/li&gt;
&lt;li&gt; Cree una cuenta FTP que apunte a su directorio de subdominio&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F30%2F1%2A4ukK6_Z0c8fqN3psKu0Fdg.png%3Fq%3D20" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F30%2F1%2A4ukK6_Z0c8fqN3psKu0Fdg.png%3Fq%3D20" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F599%2F1%2A4ukK6_Z0c8fqN3psKu0Fdg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F599%2F1%2A4ukK6_Z0c8fqN3psKu0Fdg.png" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nota: Para un sitio web de producción real, use su dominio principal. Solo estamos usando un subdominio para los propósitos de este tutorial.&lt;/p&gt;

&lt;p&gt;Deberá guardar sus credenciales de FTP en algún lugar que usaremos durante la configuración de la canalización de Buddy. Una vez que haya completado los pasos, pase a la siguiente etapa.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Configuración del blog de Gatsby&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Suponiendo que ya tiene Node.js instalado en su sistema, cree un nuevo proyecto de blog de Gatsby con los siguientes comandos:&lt;/p&gt;

&lt;p&gt;​    $ npm install -g gatsby-cli&lt;br&gt;
​    $ gatsby nuevo amigo-gatsby-blog &lt;a href="https://github.com/gatsbyjs/gatsby-starter-blog" rel="noopener noreferrer"&gt;https://github.com/gatsbyjs/gatsby-starter-blog&lt;/a&gt;&lt;br&gt;
​    $ cd buddy-gatsby-blog&lt;br&gt;
​    $ npm install&lt;br&gt;
​    $ npm start&lt;/p&gt;

&lt;p&gt;El blog que acabamos de crear se basa en una plantilla de proyecto creada y mantenida por el fundador, Mathew Kyle. Para confirmar que está funcionando, simplemente abra un navegador en &lt;em&gt;**localhost: 8000*&lt;/em&gt;*. Si editara cualquiera de los archivos de descuento, notará que los cambios son instantáneos. Subamos ahora este proyecto a nuestro repositorio de GitHub.&lt;/p&gt;

&lt;p&gt;Primero, vaya a su cuenta de GitHub y cree un repositorio completamente en blanco: &lt;em&gt;**buddy-gatsby-blog*&lt;/em&gt;*. Asegúrese de no inicializar ningún archivo durante el proceso de creación del repositorio.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F30%2F1%2AOGCw9RyGKEntepAJah5-Iw.png%3Fq%3D20" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F30%2F1%2AOGCw9RyGKEntepAJah5-Iw.png%3Fq%3D20" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F598%2F1%2AOGCw9RyGKEntepAJah5-Iw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F598%2F1%2AOGCw9RyGKEntepAJah5-Iw.png" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A continuación, necesitamos clonar este repositorio en nuestro disco duro. Antes de hacer eso, hay algo que debe tener en cuenta.&lt;/p&gt;

&lt;p&gt;Por defecto, al menos en mi caso, &lt;em&gt;**ssh*&lt;/em&gt;* es el protocolo que uso para clonar repositorios. En una sección posterior, trabajaremos con GitHub Desktop. Desafortunadamente, esta herramienta no funciona bien con &lt;em&gt;**ssh*&lt;/em&gt;*. Parece que no hay una manera fácil de hacer que funcione especialmente en Windows. Para evitar esta molestia, cambie a https durante el proceso de clonación.&lt;/p&gt;

&lt;p&gt;Suba el proyecto &lt;em&gt;**buddy-gatsby-blog*&lt;/em&gt;* a su repositorio de GitHub con los siguientes comandos. Ingrese su nombre de usuario y contraseña de GitHub cuando se le solicite:&lt;/p&gt;

&lt;p&gt;$ cd buddy-gatsby-blog&lt;br&gt;
# reemplaza {username} con tu nombre de usuario de GitHub&lt;br&gt;
$ git remote add origin &lt;a href="https://github.com/%7Busername%7D/buddy-gatsby-blog.git" rel="noopener noreferrer"&gt;https://github.com/{username}/buddy-gatsby-blog.git&lt;/a&gt;&lt;br&gt;
$ git push -u maestro de origen&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Despliegue con Buddy&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Ahora que tenemos nuestro repositorio remoto listo, es hora de implementar nuestro sitio web. Primero, regístrese para obtener una cuenta gratuita en &lt;a href="https://www.buddy.works/?utm_source=aligator_freeaccount&amp;amp;utm_medium=cpcl&amp;amp;utm_campaign=bz_alligator_art1019&amp;amp;utm_content=gadsby_mw" rel="noopener noreferrer"&gt;Buddy&lt;/a&gt;. Te recomendaría que te registres con tu cuenta de GitHub. Esto facilitará la selección de su proyecto en el siguiente paso. Utilizaremos esta plataforma para automatizar el proceso de implementación de nuestro sitio web estático.&lt;/p&gt;

&lt;p&gt;Luego, haga clic en &lt;em&gt;**New Project*&lt;/em&gt;&lt;em&gt;. Seleccione *&lt;/em&gt;&lt;em&gt;GitHub*&lt;/em&gt;* como su proveedor de alojamiento Git y luego seleccione o escriba &lt;em&gt;**buddy-gatsby-blog*&lt;/em&gt;* en la sección del repositorio. Espere unos segundos y se le presentará la opción de crear una nueva pipeline(React). Haga clic en el botón y se le presentará un formulario para definir los detalles de su tubería. Simplemente ingrese lo siguiente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name : Build &amp;amp; Deploy&lt;/li&gt;
&lt;li&gt;Trigger Mode : On push&lt;/li&gt;
&lt;li&gt;Branch : Single branch — master&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;1. Construir acción&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Buddy es lo suficientemente inteligente como para detectar que estamos trabajando con un proyecto de Gatsby. Seleccione &lt;em&gt;**Gatsby CLI*&lt;/em&gt;*, que es un contenedor docker especializado creado para ejecutar el comando Gatsby CLI. Después de seleccionarlo, especifique los siguientes comandos en la sección bash:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F30%2F1%2A_wqsrwv-AWfDbJJm9rZ1jg.png%3Fq%3D20" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F30%2F1%2A_wqsrwv-AWfDbJJm9rZ1jg.png%3Fq%3D20" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F595%2F1%2A_wqsrwv-AWfDbJJm9rZ1jg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F595%2F1%2A_wqsrwv-AWfDbJJm9rZ1jg.png" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Haga clic en el comando &lt;em&gt;**Add this action*&lt;/em&gt;* para confirmar. Se lo dirigirá a la página de resumen de la pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;2. Implementar acción&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Justo debajo de la acción &lt;em&gt;**Execute:gatsby build*&lt;/em&gt;&lt;em&gt;, haga clic en el signo más para agregar una nueva acción. Esta vez seleccione FTP y ponga sus credenciales FTP que guardó anteriormente. Asegúrese de seleccionar *&lt;/em&gt;&lt;em&gt;Source path*&lt;/em&gt;* y la &lt;em&gt;**Remote path*&lt;/em&gt;* correctamente.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F26%2F1%2AyAVyeaLZ701UM9d9FHTTtA.png%3Fq%3D20" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F26%2F1%2AyAVyeaLZ701UM9d9FHTTtA.png%3Fq%3D20" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F595%2F1%2AyAVyeaLZ701UM9d9FHTTtA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F595%2F1%2AyAVyeaLZ701UM9d9FHTTtA.png" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tenga en cuenta que / en &lt;em&gt;**Remote path*&lt;/em&gt;* en realidad apunta a la carpeta de subdominio especificada durante la creación de la cuenta FTP. no la raíz del servidor web real. Haga clic en el botón &lt;em&gt;**Add this action*&lt;/em&gt;*.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Ejecutar Pipeline&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;La siguiente página debe mostrar sus acciones principales. Haga clic en el botón &lt;em&gt;**Run Pipeline*&lt;/em&gt;&lt;em&gt;, luego presione el botón *&lt;/em&gt;&lt;em&gt;Run Now*&lt;/em&gt;* en la página siguiente. Espere unos minutos para que se complete el proceso de compilación e implementación. Una vez hecho esto, abra su navegador e ingrese la URL que utilizó para crear su subdominio para confirmar que la implementación se realizó correctamente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F30%2F1%2AKMI52Z9RggIAR-CKtwhELA.png%3Fq%3D20" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F30%2F1%2AKMI52Z9RggIAR-CKtwhELA.png%3Fq%3D20" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F600%2F1%2AKMI52Z9RggIAR-CKtwhELA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F600%2F1%2AKMI52Z9RggIAR-CKtwhELA.png" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora que hemos automatizado el proceso de implementación, hablemos ahora sobre el flujo de trabajo de administración de contenido en la siguiente sección:&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Flujo de trabajo de gestión de contenido con GitHub&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Los escritores de contenido a menudo son personas no técnicas que rara vez verá abrir un terminal para ejecutar un comando. Afortunadamente, tenemos herramientas GUI que harán que la administración de contenido sea muy fácil. En mi opinión, este flujo de trabajo es mucho mejor y más fácil de trabajar que los editores de contenido WYSIWG de WordPress.&lt;/p&gt;

&lt;p&gt;Primero, los escritores necesitan aprender a escribir usando el formato &lt;a href="https://www.markdowntutorial.com/" rel="noopener noreferrer"&gt;Markdown&lt;/a&gt;. Es realmente simple de aprender y no debería tomar más de 30 minutos para dominarlo. Después de eso, usarán este formato por el resto de su vida. A continuación, deberán descargar e instalar&lt;a href="https://typora.io/" rel="noopener noreferrer"&gt; typora.io&lt;/a&gt;, un editor crafted markdown maravillosamente diseñado.&lt;/p&gt;

&lt;p&gt;A continuación, deben crear una cuenta con&lt;a href="https://github.com/" rel="noopener noreferrer"&gt; GitHub&lt;/a&gt;. Como administrador del repositorio, debe darles acceso al repositorio &lt;em&gt;**buddy-gatsby-blog*&lt;/em&gt;*. Deberían poder clonar el repositorio, crear nuevas sucursales y enviar solicitudes de extracción. Sin embargo, no se les debe permitir actualizar el maestro directamente. Solo los editores deberían poder fusionar nuevos artículos con la rama maestra.&lt;/p&gt;

&lt;p&gt;Aquí el sitio &lt;a href="https://learngitbranching.js.org/" rel="noopener noreferrer"&gt;interactive training site&lt;/a&gt; que enseña a los principiantes sobre la ramificación de Git. Cada escritor necesita descargar e instalar Gi&lt;a href="https://learngitbranching.js.org/" rel="noopener noreferrer"&gt;tHub Desktop&lt;/a&gt;. Tendrán que clonar el repositorio remoto en su disco duro antes de poder comenzar a escribir artículos.&lt;/p&gt;

&lt;p&gt;Una alternativa es instalar &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt;, que proporciona edición de rebajas y herramientas de administración de repositorio GitHub, interfaz todo en uno. En la siguiente sección, le mostraré cómo crear y enviar nuevos artículos para que los editores los revisen.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Crear un nuevo artículo&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Para crear un nuevo artículo, se deben seguir los siguientes pasos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Usando GitHub desktop, mientras la rama maestra está activa, cree una nueva rama, ej. &lt;em&gt;**gatsby-post*&lt;/em&gt;*&lt;/li&gt;
&lt;li&gt;Abra el proyecto &lt;em&gt;**buddy-gatsby-blog*&lt;/em&gt;* en Typora. Cree una nueva carpeta en el blog llamada &lt;em&gt;**gasby-post*&lt;/em&gt;*.&lt;/li&gt;
&lt;li&gt;Dentro de esta carpeta, cree un nuevo archivo markdown: &lt;em&gt;**index.md*&lt;/em&gt;*.&lt;/li&gt;
&lt;li&gt;Escribe contenido markdown. Debe especificar la sección front matter en la parte superior. Aquí hay una muestra:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F30%2F1%2AOyXQ81RVpirHlRMmF9-Umw.png%3Fq%3D20" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F30%2F1%2AOyXQ81RVpirHlRMmF9-Umw.png%3Fq%3D20" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F802%2F1%2AOyXQ81RVpirHlRMmF9-Umw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F802%2F1%2AOyXQ81RVpirHlRMmF9-Umw.png" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Después de guardar el archivo, vaya a GitHub desktop y confirme los nuevos cambios.&lt;/li&gt;
&lt;li&gt; Luego haga clic en el botón Publish this Branch.&lt;/li&gt;
&lt;li&gt;A continuación, haga clic en el botón Create Pull Request. Esta es básicamente una solicitud formal para que el editor revise el borrador y fusione la nueva rama con master. Se abrirá una página web donde el escritor confirmará el envío de la solicitud de extracción.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Y así es como un escritor puede crear y enviar un nuevo artículo para el blog de Gatsby. Ahora es el turno de los editores para revisar el borrador.&lt;/p&gt;

&lt;h2&gt;
  
  
  Revisión de un borrador y publicación
&lt;/h2&gt;

&lt;p&gt;La responsabilidad de revisar un borrador debe ser un editor u otro escritor. A menudo es difícil para un autor criticar su propio trabajo de manera objetiva. Por lo tanto, alguien más necesita verificar su trabajo. El proceso de revisión es el siguiente:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;El editor localiza la solicitud de extracción enviada en GitHub desktop en el sitio web de GitHub.&lt;/li&gt;
&lt;li&gt;El editor revisa el artículo y coloca &lt;a href="https://github.com/features/code-review/" rel="noopener noreferrer"&gt;comentarios en línea&lt;/a&gt; utilizando las herramientas de revisión del sitio web de GitHub para que el autor pueda realizar cambios. El autor será notificado por correo electrónico de GitHub para actuar sobre esos comentarios de revisión. A veces, el proceso de revisión puede ser un proceso de ida y vuelta entre el escritor y el editor. El editor puede decidir hacer los cambios si son menores.&lt;/li&gt;
&lt;li&gt;Si todos están contentos con el artículo, el editor lo fusiona con la rama maestra.&lt;/li&gt;
&lt;li&gt;Esto hace que Buddy realice un proceso de compilación e implementación. Dentro de un par de minutos, el nuevo artículo aparecerá publicado en el sitio en vivo.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F30%2F1%2ABLnMgTCyXca5a6qdP3Ab5A.png%3Fq%3D20" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F30%2F1%2ABLnMgTCyXca5a6qdP3Ab5A.png%3Fq%3D20" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F598%2F1%2ABLnMgTCyXca5a6qdP3Ab5A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F598%2F1%2ABLnMgTCyXca5a6qdP3Ab5A.png" alt="img"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y así es como se lleva a cabo el proceso de revisión de un borrador y publicación. En la siguiente sección, veremos cómo podemos actualizar un artículo que ya ha sido publicado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Actualización de un artículo publicado
&lt;/h2&gt;

&lt;p&gt;Actualizar un artículo que ya ha sido publicado es tan fácil como el pastel. Tenga en cuenta que solo los usuarios autorizados para ingresar a la rama maestra pueden hacer esto:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cambiar a la rama maestra&lt;/li&gt;
&lt;li&gt;Localice y abra el artículo en Typora o en su editor de rebajas favorito.&lt;/li&gt;
&lt;li&gt;Haz los cambios, guarda y haz un commit&lt;/li&gt;
&lt;li&gt;Empuje la nueva confirmación al repositorio remoto&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://www.buddy.works/?utm_source=aligator_commit&amp;amp;utm_medium=cpcl&amp;amp;utm_campaign=bz_alligator_art1019&amp;amp;utm_content=gadsby_mw" rel="noopener noreferrer"&gt;Buddy&lt;/a&gt; recogerá el nuevo commit, reconstruirá el sitio estático y lo implementará automáticamente. Dentro de un par de minutos, debería ver la actualización del artículo publicado. Tenga en cuenta que debido al almacenamiento en caché del navegador, es posible que no lo vea de inmediato. Puede realizar una actualización completa en Chrome para borrar la memoria caché de la página y ver el nuevo estado del artículo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resumen
&lt;/h2&gt;

&lt;p&gt;Como puede ver, configurar y ejecutar un sitio de blog estático es bastante fácil y tiene muchas ventajas sobre una plataforma CMS tradicional. Si desea agregar funciones tales como formularios de contacto, inicios de sesión de usuario, etc., deberá implementar un proveedor de servicios local o de terceros que pueda manejar esas interacciones dinámicas por usted. Por ejemplo, implementar un sistema de comentarios es tan simple como integrarse con una plataforma como &lt;em&gt;**Disqus*&lt;/em&gt;*. Debe tener en cuenta que si más scripts de terceros integra, más su sitio estático se vuelve más pesado. Siempre debe buscar alternativas que sean beneficiosas tanto para su negocio en línea como para su audiencia. Por ejemplo, en lugar de mostrar anuncios molestos en sus publicaciones, puede monetizar su blog promocionando productos y servicios a través de enlaces de afiliados. De esta manera, le brinda a su audiencia una experiencia de lectura limpia y al mismo tiempo gana un montón de dinero.&lt;/p&gt;

&lt;p&gt;Si bien aún existen ciertas limitaciones en el tipo y tamaño de los sitios web que puede construir hoy en día utilizando generadores de sitios estáticos, esas limitaciones eventualmente se resolverán. No pasará mucho tiempo cuando los generadores de sitios estáticos se conviertan en la tecnología dominante para construir nuevos sitios.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>gatsby</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
